2009-09-15 155 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 - 本地管理員)。首先,我從網絡共享中安裝,那時卸載沒有完成。在安裝之前將安裝程序複製到本地磁盤時,卸載工作得很好!