Мы находимся в процессе обновления конструкции пакета MSI нашего продукта для Windows Server 2008. Основным компонентом нашей установки является приложение, которое запускается как служба Windows. Существует также приложение конфигурации, которое запускается во время установки, чтобы настроить записи реестра для использования службой.
Служба и приложение конфигурации зависят от среды выполнения Microsoft C / C ++ и MFC, которые включены в .msi в качестве модулей слияния. Сборки для среды выполнения C / C ++ и MFC фиксируются во время InstallFinalize, что, по-видимому, препятствует запуску службы с использованием механизмов, предоставляемых установщиком Windows (это правильно?) Конечно, мы видим параллельные ошибки с at хотя бы приложение конфигурации, если оно запускается до InstallFinalize.
Подход, который мы выбрали, заключается в том, чтобы запустить приложение конфигурации как пользовательское действие "commit" после InstallFinalize, и заставить это приложение запустить службу. Для этого необходимо, чтобы приложение выполнялось с повышенными привилегиями (для которого мы используем манифест, содержащий раздел trustInfo.) Это также требует, чтобы MSI-файл был настроен для запуска этого приложения без олицетворения (что иначе смешивает повышение привилегий.)
Это приемлемый подход? Насколько это может быть в будущем? Есть ли какие-нибудь ошибки, о которых нужно знать?
Похоже, что это проблема, с которой сталкиваются другие:
http://www.mail-archive.com/wix-users@lists.sourceforge.net/msg12666.html
Существует ли официально (или неофициально) принятый способ решения таких проблем?
В качестве дополнения к этому, есть ли способ гарантировать, что приложение, запускаемое как настраиваемое действие во время процесса установки, получает фокус при запуске? Приложения, запускаемые таким образом, всегда выглядят позади установщика, и установщик сохраняет фокус, что не особенно удобно для пользователя.
Большое спасибо,
Брюс.