Через QSharedMemory нормально получается. Ключ - проще всего полный путь исполняемого файла
По идее каждый раз, когда потребуется построить список инстанций, придется проверять, а жива ли еще каждая копия (мало ли, упадет одна инстанция - а другие про это не в курсе).