WiX - перезапустить сервис после модификации установленного продукта - PullRequest
2 голосов
/ 30 января 2012

Я пишу MSI, который устанавливает службу Windows и добавляет некоторые библиотеки DLL, которые использует служба.Эти библиотеки DLL - это функции, которые можно добавлять или удалять с помощью установщика.

После того, как пользователь изменяет установленный продукт (например, добавляет новую функцию), необходимо перезапустить службу Windows.Есть ли более элегантный способ сделать это в WiX 3.5, кроме вызова пользовательского действия, которое перезапустит службу?

Вот так я запускаю службу.

<ServiceControl Id="StartService" Name="MyService" Start="install" Stop="both" Remove="uninstall"  Wait="yes" />

РЕДАКТИРОВАТЬВот полный код компонента.Не обращайте внимания на идентификаторы.

<Component Id="MyService" Guid="GUID">
     <File Id="MyService"
      Source="$(var.BuildDestination)/$(var.NameSpacePrefix).MyService.exe"
      KeyPath="yes"
      >
</File>
<RemoveFile Id='AppConfigFile' On='uninstall' Name='MyService.exe.Config' />
<User xmlns="http://schemas.microsoft.com/wix/UtilExtension"
         Id="ServiceAccount"
         CreateUser="no"
         FailIfExists="no"
         RemoveOnUninstall="no"
         UpdateIfExists="yes"
         Disabled="no"
         LogonAsService="yes"
         Name="[ACCOUNT]"
         Password="[PASSWORD]" />
<ServiceInstall
          Id="MyService"
          Type="ownProcess"
          Vital="yes"
          Name="MyService"
          DisplayName="MyService"
          Description="MyService"
          Start="auto"
          Account="[ACCOUNT]"
          Password="[PASSWORD]"
          ErrorControl="ignore"
          Interactive="no">
</ServiceInstall>
<ServiceControl Id="StartService"
                Name="MyService"
                Start="install"
                Stop="both"
                Remove="both"
                Wait="yes"
                >
</ServiceControl>

Ответы [ 2 ]

2 голосов
/ 31 января 2012

Поскольку состояние функции службы (функция, которая устанавливает и запускает службу) не было обновлено, сама служба также не была остановлена ​​и запущена. Я решил проблему, добавив ServiceControl ко всем компонентам, которые являются отдельными функциями.

<Component Id="Modules1" Guid="GUID">
<File Id="Modules.1" Source="$(var.BuildDestination)/$(var.NameSpacePrefix)Modules.1.dll" KeyPath="yes">
</File>
<ServiceControl Id="StartService1"
               Name="MyService"
               Start="install"
               Stop="both"
               Wait="yes"
                >
</ServiceControl>

1 голос
/ 31 января 2012

Это решение работает для меня:

<Component Directory="APPLICATIONFOLDER">
    <File           Source      ="MyService.exe"
                    KeyPath     ="yes" />
    <ServiceInstall Id          ="MyService.exe"
                    Name        ="My Service"
                    Account     ="LocalSystem"
                    Start       ="auto"
                    ErrorControl="normal"
                    Interactive ="no"
                    Type        ="ownProcess"
                    Description ="My service does stuff."/>
    <ServiceControl Id          ="MyService.exe"
                    Name        ="My Service"
                    Start       ="install"
                    Stop        ="both"
                    Remove      ="both"
                    Wait        ="no"/>
</Component>
...