У меня есть мультимедийное приложение (написанное на Delphi 2010, но я не уверен, что оно полностью актуально), и оно допускает только один экземпляр (через мьютекс).
Один из моих клиентов хотел бы запустить 2 экземпляраприложение, продублировав его установку и все данные приложения, поскольку это позволит ему запустить вывод на две разные звуковые карты, предоставив ему две звуковые зоны.
Теперь я могу разрешить второй экземпляр с помощью переключателя командной строкитаким образом, создавая мьютекс с другим именем и даже позволяя ему отправлять элементы управления любому экземпляру приложения с помощью переключателей командной строки или передачи сообщений Windows.
Мое приложение также предоставляет интерфейс COM для целей автоматизации, очевидно, это обеспечиваетнамного более богатый интерфейс, чем командная строка, и делает его намного проще для извлечения информации из приложения.
Так что моя проблема в том, что, насколько мне известно, я могу предоставить интерфейс COM только одному исполняемому файлу.Теперь я знаю, что это имеет смысл, но мне интересно, может ли кто-нибудь придумать обходной путь к этому.
Я быстро попытался дублировать ключи реестра для моего HKLM \ Software \ Classes \ AppID, таким образом делая AppIDv2 идошло до того, что оно запустило другую копию моего приложения, но я полагаю, что все вышло из-под контроля, когда оно попало в более конкретные GUIDS для TypeLib и т. д. Имейте в виду, я знаю, что я перешагнул границы моих знаний!* Я думаю, что если я смогу создать другую строку AppID и в конечном итоге нацелить исполняемый файл, находящийся в разных местах, то мы по крайней мере сможем выполнить некоторую автоматизацию с помощью сценариев COM Automation, но я подозреваю, что требование GUID в конечном итоге будетподведи меня.
Другой вариант может заключаться в том, чтобы переместить мой COM в inprocess и затем иметь несколько скомпилированных версий моего приложения, которые предоставляют экземпляр основного интерфейса через новые AppID, но это становится беспорядочным, когда вы хотите DLLзнать все о работающем экземпляре вашего приложения.
Любые идеи приветствуются.Заранее спасибо.