2013-07-25 67 views
1

我正在嘗試使用WiX爲我的軟件編寫MSI安裝程序/卸載程序。該軟件帶有一個始終一起運行的本地服務和相關的用戶模式進程,即當服務停止時,我的服務自動關閉用戶模式進程。 (否則,如果用戶模式進程本身終止該服務將嘗試重新啓動它。)需要一些關於使用WiX卸載我的服務的說明

所以對於卸載我想出了以下加價:

<Component Id="idCmp_MySrvc" 
     Guid="MY_GUID"> 

    <File Id="idFile_srvc.exe" 
     Name="srvc.exe" 
    Source="Sources\Code\srvc.exe" 
    Vital="yes" 
    KeyPath="yes" /> 

    <File Id="idFile_usermodule.exe" 
     Name="usermodule.exe" 
    Source="Sources\Code\usermodule.exe" 
    Vital="yes" 
    KeyPath="yes" /> 

    <ServiceControl Id="idMySrvc" 
       Name="MyServiceName" 
       Stop="uninstall" /> 
</Component> 

的想法是,當服務停止時,它將關閉我的usermodule.exe進程。

但有是三個問題/浮現在腦海的問題:

1:當我編譯此,它給了我下面的錯誤:

error CNDL0042: The Component element has multiple key paths set. The key path may only be set to 'yes' in extension elements that support it or one of the following locations: Component/@KeyPath, File/@KeyPath, RegistryValue/@KeyPath, or ODBCDataSource/@KeyPath.

2:如何確保MSI在卸載檢查期間不打擾usermodule.exe進程?

3:是否需要添加特定於我的服務和/或用戶模式進程的任何內容以使其符合卸載過程?

回答

2

一般答案:爲了安裝/卸載Windows服務,使用WiX製作的MSI包,您應該只使用ServiceInstallServiceControl元素,正如Christopher在this thread中提到的那樣。現在

,回答您的具體問題:

  1. 錯誤消息是相當的描述 - 你有一個以上的元素標記爲單個組件KeyPath='yes'。只能有一個關鍵路徑。您可以找到更多信息here(請參閱描述Component表的KeyPath列的部分)。
  2. 我認爲你可以安全地將usermodule.exe移動到一個單獨的組件。如果您說停止服務會導致該進程丟失,並且我們知道在卸載之前發生的卸載服務操作發生在刪除文件之前,那麼讓Windows Installer完成其卸載組件的工作似乎是安全的。
  3. 正如前面所說,我不這麼認爲。

希望這會有所幫助。

相關問題