Запуск внешнего сервиса при установке с WiX - PullRequest
3 голосов
/ 28 марта 2019

У меня есть служба (которая устанавливается и работает без проблем), но для корректной работы требуется, чтобы при установке была запущена служба «Смарт-карта». Есть ли способ настроить установщик WiX (через загрузчик BURN или основной MSI) для запуска этой службы при установке, если она не работает?

Я пытался использовать элемент управления службой, но я обеспокоен тем, что атрибут «Удалить» приведет к удалению службы SmartCard при работе приложения!

Мне неясно, решит ли проблема простое удаление этого атрибута и не удалит ли сервис при удалении. Я хочу запустить службу, только если она не запущена, и оставить ее включенной при удалении.

<Component Id="SmartCardServiceStarter" Directory="INSTALLFOLDER" 
           Guid="A-GUID" KeyPath="yes">
  <ServiceControl Id="SmartCardServiceStarter"
                    Start="install"
                    Stop="uninstall"
                    Remove="???"
                    Name="SCardSvr"
                    Wait="yes" />
  <Condition><![CDATA[STARTSERVICEONINSTALL <> "false"]]></Condition>
</Component>

1 Ответ

2 голосов
/ 28 марта 2019

Необязательные атрибуты : вы можете опустить Remove attribute, а также настроить службу на остановку и запуск только при установке, оставив служба работает, даже если вы удалите ее (что может быть полезно, так как вы не можете знать, зависят ли другие приложения от службы - вы можете подумать и определить, нужно ли вам изначально запускать службу, но это, вероятно, не нужно):

<Component Id="SmartCardServiceStarter" Directory="INSTALLFOLDER" Guid="PUT-GUID-HERE" KeyPath="yes">
  <ServiceControl Id="SmartCardServiceStarter"
                    Start="install"
                    Stop="install"
                    Name="SCardSvr"
                    Wait="yes" />
  <!-- <Condition><![CDATA[STARTSERVICEONINSTALL <> "false"]]></Condition> -->
</Component>

Таблица ServiceControl : Вы можете наблюдать результат различных комбинаций атрибутов в элементе ServiceControl (источник WiX) с помощью просматривая скомпилированный MSI с Orca или аналогичным инструментом (ближе к низу, предпочитайте Orca вместо SuperOrca , я видел, что последние не изменились) и проверяю Таблица ServiceControl (законченный MSI). Изменения будут отображаться в "Event" column. Сопоставьте значения битовых флагов в соответствии с документацией MSI SDK.

Встроенная системная служба : видя, что это системная служба, я полагаю, вы можете настроить ее только на запуск и оставить ее включенной, не добавляя никакой остановки вообще, но вам может понадобиться прекратить замену собственных файлов во время крупных обновлений? Я не знаю сценарий. Пожалуйста, тщательно протестируйте и используйте виртуальный для подобных вещей. Очевидно, я знаю. Основные сценарии обновления, вероятно, будут диктовать, что вы хотите остановить установку, получить обновления и предотвратить блокировки файлов, которые вы хотите заменить.

Условие : Вы должны быть в состоянии использовать это условие для контроля, хотите ли вы, чтобы выполнялись действия службы или нет. Фактически условие определяет, будет ли установлен компонент, на котором размещены эти действия службы, или нет, следовательно, определяет, будут ли действия службы выполняться или нет (также).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...