2009-09-15 151 views
16

即使重新启动,服务仍然存在,即使可执行文件不存在。我正在使用WIX版本3.0.5419.0为什么我的服务在卸载时被删除? (WIX)

<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. 

任何帮助将不胜感激。

回答

13

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

我怀疑你的问题是,无论是的ServiceControl元素的ID,或者你有一个流浪服务游逛。

尝试以下操作:

  • 更改的ServiceControl标识为“IdiomServer_ServiceControl”
  • 更改名称在这两个服务元素“Foobar的”,并检查Foobar的服务既是安装和卸载。如果可行,你可能只需要用“sc”命令手动删除流浪的IdiomServer条目。
+2

关闭。问题不是ID,而是Component/@ Guid。一旦我改变了这一点,卸载工作正常。 在创建产品的新版本时,服务组件的Guid显然需要随Product/@ Id一起更改。 – 2009-09-16 00:29:19

+1

这是不正确的。更改Component/@ Guid意味着组件中包含的所有资源也必须更改。这是通常称为“组件规则”的MSI限制。更改Component/@ Guids时,您会看到非常奇怪的升级和卸载行为。 原始卸载的详细日志文件应显示为什么ServiceControl不会删除您的服务。 – 2009-09-16 19:33:10

+0

请参阅Rob的博客条目http://robmensching.com/blog/posts/2003/10/18/Component-Rules-101,了解为什么在不更改资源的情况下更改Component Id是一件坏事。 – Martin 2009-09-23 01:26:38

1

如果更改组件GUID的工作,我怀疑,这个问题可能会在涉及一种erronous的SharedDLL REF计数器在注册表中:HKEY_LOCAL_MACHINE \ SOFTWARE \微软\的Windows \ CurrentVersion \ SharedDlls

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

1

我也有类似的问题,通过鲁珀特描述。在我的情况下,该服务并未从服务控制管理器中卸载,并且.exe​​也被留下。经过多次挖掘,答案非常简单。在包含<组件>元素的GUID属性被设置为“”(即空字符串)。用<组件代替... GUID =“56CD2588-B976-4198-B815-FAB7E1E57CD7”>解决了这个问题

11

我也有类似的问题。就我而言,我只需确保ServiceInstall和ServiceControl的“名称”属性相同,问题就消失了。

+0

我刚刚花了2天时间用wix和windows安装程序尝试使用MajorUpgrade元素跟踪服务的奇怪行为(包括不卸载服务)使用服务的各种事情。在对我的Wix文件进行无数次更改后,我发现了这一点,意识到我遇到了同样的问题,更改了名称,删除了所有其他更改,并且一切正常!如果我可以不止一次地投票! :) – thudbutt 2014-03-14 10:04:12

+0

这是我失败的原因。现在我看 - 当然这看起来很明显。谢谢 – 2017-01-10 23:24:36

2

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

0

我有一个类似的问题。即卸载删除everyhing但在服务列表中的条目(赢7 - 本地管理员)。首先,我从网络共享中安装,那时卸载没有完成。在安装之前将安装程序复制到本地磁盘时,卸载工作得很好!