当我卸载我的服务时,我得到一个错误,它说我必须在卸载之前停止这样的服务。这是不令人满意的 - 卸载程序应该自动停止它。
几个月前我发现了一个博客或新闻组发布并让它正常工作,但现在它已经停止为我工作了。而且我没有帖子的链接...也许其他人知道它在哪里?:) 我想我改变了一些微妙的东西,它停止了工作。我发现 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 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" />
有任何想法吗?