Когда я удаляю свой сервис, я получаю сообщение об ошибке, в котором говорится, что я должен остановить тот или иной сервис перед удалением. Это неудовлетворительно - деинсталлятор должен автоматически остановить его.
Я нашел сообщение в блоге или группе новостей об этом месяце назад и заставил его работать должным образом, но теперь он перестал работать для меня. И у меня нет ссылки на пост ... может, кто-то еще знает, где это? :) Я думаю, я изменил некоторые тонкие вещи, и это перестало работать. Я нахожу Wix чрезвычайно трудным для устранения неполадок.
Я использую следующую команду include для получения свойства X_ WIN_ SERVICE_ NAME (извините, я не знаю, как избежать _ экранирования здесь) из реестра. Это не имеет значения при установке, потому что в этом случае я явно устанавливаю его с помощью входного файла. Это включение используется перед любыми компонентами в моем файле wxs.
<Include xmlns="http://schemas.microsoft.com/wix/2006/wi">
<?ifndef SetupXWinServiceRegistryProperties ?>
<?define SetupXWinServiceRegistryProperties ?>
<?define XWinServiceRegistryKey='Software\X\Y'?>
<Property Id="X_WIN_SERVICE_NAME">
<RegistrySearch Id="XWinServiceNameSearch"
Root="HKLM"
Key="$(var.XWinServiceRegistryKey)"
Name="ServiceName"
Type="raw"/>
</Property>
<?endif?>
</Include>
Для сохранения значения реестра при установке используется следующий компонент include:
<Include xmlns="http://schemas.microsoft.com/wix/2006/wi">
<?ifndef WriteXWinServiceRegistryProperties ?>
<?define WriteXWinServiceRegistryProperties ?>
<Component Id="CompWriteXWinServiceRegistryProps"
Guid="some guid">
<!-- Write properties to the registry. Then they will be
accessable during uninstall. -->
<RegistryValue Root="HKLM"
Key="$(var.XWinServiceRegistryKey)"
Name="ServiceName"
Type="string"
Value="[X_WIN_SERVICE_NAME]"
Action="write" />
</Component>
<?endif?>
</Include>
Я проверил свою систему после установки, и там правильно написано значение реестра. Часть в моем компоненте, где настраивается служба, выглядит так:
<ServiceInstall Id="ServiceInstallXWinService"
Name="[X_WIN_SERVICE_NAME]"
Start="auto"
DisplayName="xxx"
Description="yyy"
Account="[X_WIN_SERVICE_USER]"
Password="[X_WIN_SERVICE_PASSWORD]"
Type="ownProcess"
ErrorControl="normal"
Vital="yes" />
<ServiceControl Id="ServiceInstallXWinService"
Name="[X_WIN_SERVICE_NAME]"
Stop="both"
Remove="uninstall"
Wait="yes" />
Есть идеи?