Установщик Wix, чтобы заменить INSTSRV и SRVANY для пользовательской установки службы - PullRequest
2 голосов
/ 21 декабря 2011

Я создал исполняемый файл MyService.exe с помощью Visual Studio C # Express. В версии Express нет опций для создания сервиса. В прошлом он был установлен вручную как пользовательская служба с использованием INSTSRV и SRVANY, как описано в статье MSDN «Как создать пользовательскую службу»

Можно ли создать установщик wix 3.5 для этого файла, который

  1. не требует наличия файлов SRVANY.exe и INSTRV.exe на целевом компьютере
  2. не использует INSTSRV.exe как пользовательское действие

Ответы [ 2 ]

3 голосов
/ 15 мая 2014

Вот настоящий совок: сервис - сервис, сервис.Это мой девиз.Под этим я подразумеваю, что мне все равно, используете ли вы C ++ EXE, VB exe, C # EXE, какой-нибудь исполняющий EXE-файл хоста, такой как SrvAny.exe ... все они реализуют один и тот же API для взаимодействия со службойуправляющий

Итак, SrvAny будет вызван SCM и получит команду запуска.В этот момент он будет читать значения реестра и знать, как запустить другой EXE или скрипт.Когда SrvAny получает вызов Stop, он собирается завершить ваш процесс и сообщить о остановке SCM.

Так работает служба.Давайте поговорим о том, как его установить.Существует множество способов программно создать службу (SC, InstSrv.exe, пользовательские действия класса установщика и т. Д.), Но с точки зрения MSI ни один из них никогда не нужен.Установщик Windows содержит таблицы ServiceInstall и ServiceControl, а также стандартные действия для запуска, остановки, создания и удаления служб Windows.Иногда, например, в случае с SrvAny.exe, вы получаете некоторые требования к установщику, которые невозможно выразить с помощью этих таблиц, и в этом случае вы используете таблицу реестра.Для SrvAny.exe это требование для создания ключа Parameters с данными реестра, который учит SrvAny.exe, что на самом деле вызывать при запуске.

Вот пример в WiX для использования SrvAny.exe для запуска сценария NodeJs какуслуга:

<Component Id="c1" Guid="redacted">
  <File Id="f1" Source="$(var.SourceDir)\srvany.exe" KeyPath="yes" />
  <ServiceInstall Id="si1" DisplayName="MyService" Description="MyService" Name="MyService" Start="auto" Type="ownProcess" Vital="no" ErrorControl="normal" Account="NT AUTHORITY\NetworkService"  />
  <ServiceControl Id="sc1" Name="MyService" Remove="both" Stop="both" Start="install" Wait="yes" />
  <RegistryValue Id="reg1" Root="HKLM" Key="SYSTEM\CurrentControlSet\Services\MyService\Parameters" Name="Application" Type="string" Value="node &quot;[#f2]&quot;" Action="write" />
</Component>
<Component Id="c2" Guid="redacted" KeyPath="yes">
  <File Id="f2" Source="$(var.SourceDir)\server.js" />
</Component>
0 голосов
/ 22 декабря 2011

WiX поддерживает установку служб Windows, но только нативные. Это означает, что приложение должно быть написано как услуга .

Поскольку ваше приложение использует SRVANY.EXE для запуска в качестве службы, у вас есть два варианта

  • переписать ваше приложение как собственный сервис Windows

или

...