2009-12-03 25 views
2

一部分涉及註冊插件的第三方產品重新啓動服務。當第三方服務正在運行時,它會加載我們的DLL,因此磁盤上的文件被鎖定。WiX的卸載程序:如果我們的應用程序的當前

因此,當我們卸載我們的產品,我們需要停止第三方服務開始,然後重新啓動它,當我們與卸載完成。 (我們也做同樣的停止/恢復的事情在安裝時,因爲如果這是升級,那麼現有的文件將被再次鎖定)

維克斯有處理的幸福路徑的命令,沒有問題:

<ServiceControl Id="SomeUniqueId" Name="NameOfTheirService" 
       Start="both" Stop="both"/> 

即在兩個安裝和卸載開始停止服務,並在這兩個安裝和卸載年底重新啓動。到現在爲止還挺好。

問題就來了,如果最終用戶首先卸載第三方應用程序,然後嘗試卸載我們的應用程序。我們的應用程序不會與第三方服務一起使用,但如果用戶想要同時卸載它們,則沒有任何事情可以強制他們按特定順序進行操作。但是,如果不再安裝的第三方服務,那麼我們的卸載程序:

  1. 試圖阻止第三方服務失敗,因爲該服務不再存在,決定了失敗並不重要,並繼續。
  2. 卸載我們的產品。
  3. 嘗試重新啓動第三方服務失敗,因爲該服務不再存在,決定這個失敗重要的,並提出一個錯誤對話框說:「服務'NameOfTheirService'(NameOfTheirService)無法啓動。你有足夠的權限來啓動系統服務。「 (重試/取消)
  4. 如果用戶單擊重試,轉到3.
  5. 如果用戶單擊取消,回滾並取消卸載。

換句話說,維克斯的錯誤處理是錯誤的。停止服務應該是容錯的,而且是。 安裝後啓動服務可能是不能容忍的;這很好:如果服務無法啓動,則無法安裝。但在卸載後啓動服務應該是容錯的,而不是。

如何卸載後重新啓動服務,如果該服務不再存在則不卸載?

回答

0

如果您在等待屬性添加到SeviceControl元素,並將其設置爲沒有然後還有「重試」和「取消」,您還可以得到一個「忽略」按鈕,用戶能單擊以繼續安裝/卸載而不啓動/停止服務。

相關問題