Когда я удаляю свою службу, я получаю сообщение об ошибке, в котором говорится, что я должен остановить такую-то службу перед удалением. Это неудовлетворительно - программа удаления должна автоматически остановить его.
Я нашел сообщение в блоге или группе новостей об этом несколько месяцев назад и заставил его работать должным образом, но теперь это перестало работать для меня. А у меня нет ссылки на пост ... может еще кто знает где он? :) Наверное, я поменял какую-то тонкую вещь, и она перестала работать. Я считаю, что устранение неполадок с Wix чрезвычайно сложно.
Я использую следующее включение, чтобы получить свойство 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" />
Любые идеи?