2010-04-01 99 views
1

我有一個服務MyService.exe,用於保存我的應用程序MyApp.exe,這意味着它在此應用程序崩潰時啓動應用程序或任何其他應用程序。基本上,當服務停止時,應用程序停止(通過服務),當服務啓動時,應用程序由服務啓動。在卸載之前停止服務和babysited應用程序

爲了阻止我的服務,並通過我的應用程序卸載我在做的時候:

<ServiceControl Id='MyServiceControl' Name='MyServiceForTest' Start='install' Stop='uninstall' Remove='uninstall'/> 

但是,當我想卸載的一切,我得到錯誤信息:「安裝程序必須更新文件或服務在系統運行時無法更新,如果選擇繼續,則需要重新啓動才能完成設置。「如果我在運行卸載程序之前手動停止該服務,則不會收到此消息,因爲我的服務和應用程序都不再運行。

在日誌文件中,我注意到這發生在InstallValidate中,並且我得到MyApp.exe正在運行的消息b/c。

我認爲會發生什麼情況是:卸載程序檢查正在運行的應用程序,它注意到MyService.exe和MyApp.exe都在運行,可能檢測到MyService.exe將被卸載程序本身按照指示停止,但不知道MyApp.exe這個服務將被停止後,它也將被終止,因此它將顯示重新啓動消息。

我不能只關閉MyApp.exe從卸載程序B/C該服務將重新啓動它。

我該如何解決此問題,以便用戶在進行卸載/升級之前不需要重新啓動或手動停止服務?此外,我無法再更改MyService和MyApp代碼,因此我只能從(un)安裝程序執行此操作。

TIA, 薇薇

回答

0

我會暴露你的服務的機制中,你的安裝程序可以指示它屹立不倒,並終止應用程序。這種方式當Windows安裝程序成本覈算尋找鎖定文件時,它找不到任何。

+0

如上所述,我不能再改變服務中的代碼。 在InstallValidate調用「net stop MyService」之前,我可以實際上擁有一個自定義操作嗎?這是正確的嗎?這樣,我將在安裝程序查找正在使用的文件之前停止該服務。 – 2010-04-06 08:35:36

+0

然後祝你好運。當開發人員告訴我他們的代碼是「完成的」,而安裝者只需要「使其工作」時,事情通常不會結束。 – 2010-04-06 15:23:40

相關問題