为什么卸载时我的服务没有被删除? (WIX)

时间:2009-09-15 22:02:29

标签: wix

即使重新启动,即使可执行文件消失,服务仍然存在。我正在使用WIX版本3.0.5419.0

<Component Id="IdiomServer.exe" Guid="7a751e1e-5e9e-41d2-be60-dc905ab1ccad">
  <File Id="IdiomServer.exe" Source="$(var.IdiomServer.TargetDir)IdiomServer.exe" KeyPath="yes" />
  <ServiceInstall Id="IdiomServer_Service" Name="IdiomServer 4.0" Account="LocalSystem" Description="Idiom Repository Server" ErrorControl="normal" Start="auto" Type="ownProcess" Vital="yes" />
  <ServiceControl Id="IdiomServer_Service" Name="IdiomServer 4.0" Remove="uninstall" Stop="uninstall" Wait="yes" />
</Component>

安装Windows服务正常。卸载它似乎什么都不做。卸载日志文件的部分:

MSI (s) (D8:5C) [09:43:58:033]: Doing action: StopServices
MSI (s) (D8:5C) [09:43:58:033]: Note: 1: 2205 2:  3: ActionText 
Action start 9:43:58: StopServices.
Action ended 9:43:58: StopServices. Return value 1.
MSI (s) (D8:5C) [09:43:58:033]: Doing action: DeleteServices
MSI (s) (D8:5C) [09:43:58:033]: Note: 1: 2205 2:  3: ActionText 
Action start 9:43:58: DeleteServices.
Action ended 9:43:58: DeleteServices. Return value 1.

非常感谢任何帮助。

6 个答案:

答案 0 :(得分:14)

我有一个几乎相同的安装程序,工作正常。唯一的区别是我的ServiceControl元素与ServiceInstall元素具有不同的Id,以及'Start =“install”'属性。

我怀疑你的问题是ServiceControl元素的Id,或者你有一个流浪服务。

尝试以下方法:

  • 将ServiceControl ID更改为“IdiomServer_ServiceControl”
  • 将两个服务元素中的名称更改为“Foobar”,并检查Foobar服务是否已安装和卸载。如果可行,您可能只需要使用“sc”命令手动删除迷路IdiomServer条目。

答案 1 :(得分:12)

我也有类似的问题。在我的例子中,我只需要确保ServiceInstall和ServiceControl的“Name”属性都相同,问题就消失了。

答案 2 :(得分:3)

我有同样的服务问题没有删除。我从另一个项目中复制了Component,Service Install和ServiceControl元素,而没有更改Guid或ID。使用新的GUID和ID进行更新后,服务现在将删除。

答案 3 :(得分:1)

如果更改组件guid有效,我怀疑该问题可能与注册表中的错误SharedDLL引用计数器有关: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ SharedDlls

这些是MSI可以递增(如果要求)的传统样式引用计数器 - 它们将覆盖MSI自己的引用计数。对于某些愚蠢的原因,Installshield会增加所有文件的遗留引用计数(无论它们是否已经版本化),这经常会在开发pc上发生神秘的“卸载时的杂散文件”。如果启用共享dll引用计数,则在Wix中也会出现相同的情况,并且在极少数情况下,重新计数在主要升级期间可能会损坏。

答案 4 :(得分:1)

我遇到了类似鲁珀特所描述的问题。在我的情况下,服务未从服务控制管理器中卸载,并且.exe​​也被遗忘。经过多次挖掘后,答案非常简单。在包含&lt;组件&gt;中GUID属性设置为“”(即空字符串)。用&lt; Component ... GUID =“56CD2588-B976-4198-B815-FAB7E1E57CD7”替换&gt;解决了问题

答案 5 :(得分:0)

我有类似的问题。即卸载删除的Everyhing但是服务列表中的条目(Win 7 - 本地管理员)。首先我从网络共享安装,这是卸载没有完成的时候。在安装之前将安装程序复制到本地磁盘时,卸载工作非常棒!