2015-10-14 161 views
0

我正在使用WiX Toolset創建MSI安裝程序。這將安裝具有作爲服務安裝的本機包裝的Java應用程序。如何在使用WiX Toolset(MSI Installer)進行卸載時停止服務?

我已經安裝好了,但是當我嘗試卸載它時,重新啓動管理器檢測到正在使用的文件並顯示一個對話框,指出需要重新啓動。

Windows服務運行本機包裝bin\wrapper-windows-x86-64.exe。此組件配置爲:

<DirectoryRef Id="bin97543xxxx"> 
     <Component Guid="cb21cd16-4bb9-4e57-a13c-4d064f01cd43" Id="bin_wrapper_windows_x86_64_exe189026768"> 
      <File KeyPath="yes" Source="bin\wrapper-windows-x86-64.exe" DiskId="1" Name="wrapper-windows-x86-64.exe" Id="fl_bin_wrapper_windows_x86_64_exe189026768"/> 
      <RemoveFile Name="wrapper.log" On="uninstall" Id="rm_fl_bin_wrapper_log123456789"/> 
      <ServiceInstall Name="Test App" Description="Test App" Arguments="-s &quot;..\conf\wrapper.conf&quot; wrapper.console.flush=true" Type="ownProcess" Vital="yes" Start="auto" Account="LocalSystem" ErrorControl="ignore" Interactive="no"/> 
      <ServiceControl Id="StartService" Name="Test App" Start="install" Stop="both" Remove="uninstall" Wait="yes"/> 
     </Component> 
    </DirectoryRef> 

這個本地包裝將啓動JVM java.exe與其他一些JAR和本機DLL。這些JAR文件和DLL被定義爲獨立的組件,如:

<DirectoryRef Id="bin_wrapper_lib172428748"> 
     <Component Guid="91ea3118-769e-4100-80a2-f09a586500a5" Id="bin_wrapper_lib_wrapper_jar565349582"> 
      <File Source="bin\wrapper\lib\wrapper.jar" DiskId="1" Name="wrapper.jar" Id="fl_bin_wrapper_lib_wrapper_jar565349582"/> 
     </Component> 
    </DirectoryRef> 

當我嘗試和java.exe即使卸載它檢測到使用中的文件的程序時,該服務停止,將停止JVM。我已通過在嘗試卸載之前手動停止服務來驗證此情況。另外要注意的是,如果我繼續,那麼所有文件都會成功刪除,只是Windows服務仍然存在(但標記爲已刪除)。微星日誌顯示此:

Action start 15:48:40: InstallValidate. 
... 
MSI (s) (AC:68) [15:48:40:424]: RESTART MANAGER: Detected that application with id 3636, friendly name 'java.exe', of type RmCritical and status 1 holds file[s] in use. 
MSI (s) (AC:68) [15:48:40:424]: RESTART MANAGER: Did detect that a critical application holds file[s] in use, so a reboot will be necessary. 
... 
MSI (s) (AC:68) [15:48:59:078]: RESTART MANAGER: The user chose to go on with the installation, although a reboot will be required. 
... 
The setup must update files or services that cannot be updated while the system is running. If you choose to continue, a reboot will be required to complete the setup. 

我已經看到了等等一些類似的問題和WiX的工具集用戶郵件列表,但沒有真正的幫助。很多人都在嘗試使用自定義操作,並被告知使用ServiceControl,而不是我已經使用的。

我還看到有人提到「正在使用的文件邏輯」,我認爲這是重新啓動管理器正在做的事情。有人建議使用ServiceControl元素將相關文件添加到組件中,但這似乎不正確(或者至少我不確定如何執行此操作,仍然遵循有關分離組件的最佳做法)。

任何人都可以指向正確的方向嗎?

回答

相關問題