7

当我卸载我的服务时,我得到一个错误,它说我必须在卸载之前停止这样的服务。这是不令人满意的 - 卸载程序应该自动停止它。

几个月前我发现了一个博客或新闻组发布并让它正常工作,但现在它已经停止为我工作了。而且我没有帖子的链接...也许其他人知道它在哪里?:) 我想我改变了一些微妙的东西,它停止了工作。我发现 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" />

有任何想法吗?

4

1 回答 1

4

您确定 X_WIN_SERVICE_NAME 属性在卸载时设置为正确的值。使用详细日志文件确保搜索正确设置了值。一切看起来都很好(虽然我不知道为什么你把所有东西都放在包含文件中而不是只使用片段)。

于 2009-06-17T16:48:55.747 回答