我有一個服務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, 薇薇
如上所述,我不能再改變服務中的代碼。 在InstallValidate調用「net stop MyService」之前,我可以實際上擁有一個自定義操作嗎?這是正確的嗎?這樣,我將在安裝程序查找正在使用的文件之前停止該服務。 – 2010-04-06 08:35:36
然後祝你好運。當開發人員告訴我他們的代碼是「完成的」,而安裝者只需要「使其工作」時,事情通常不會結束。 – 2010-04-06 15:23:40