2015-05-14 104 views
0

我開發了一個使用WIX的msi安裝程序,它包含一個桌面應用程序以及一個windows服務,並且都在C#.Net 3.5框架上運行。只有當任何用戶登錄到觸發桌面應用程序啓動的系統時,我的Windows服務纔會啓動。 Windows服務作爲本地系統運行。 msi安裝程序在Win-8,Win-7和Windows-XP上成功安裝,但在卸載時顯示「File In Use」消息,即使該服務未從SCM中刪除。我已分別在服務的OnStop()方法和WIX頁面內給出了以下代碼。Msi安裝程序顯示卸載時使用的文件消息

的onStop()方法:

內部WIX
Process[] workers = Process.GetProcessesByName("filename"); 
workers[0].WaitForExit(1000); 
workers[0].Kill(); 
workers[0].Dispose(); 
workers[0].Close(); 

Product.wxs:

<ServiceInstall Id="ServiceInstaller" Name="Servicename"  
DisplayName="service display name" Description="service description" 
Start="auto" Account="LocalSystem" ErrorControl="normal" 
Type="ownProcess"></ServiceInstall> 
<ServiceControl Id="ServiceInstallerControl" Name="Servicename" 
Start="install" Stop="both" Remove="uninstall" Wait="yes" /> 

服務沒有從SCM在所有除去下面彈出消息是在時間顯示卸載過程。

enter image description here

我已經與維克斯周圍的工作來解決這個問題,但未能如願。

在這方面的任何形式的幫助將不勝感激。

+0

該服務如何運行桌面應用程序?如果該服務同步啓動桌面應用程序進程,則在桌面應用程序終止之前,服務不會將控制權返回給服務控制管理器(SCM)。可能會解釋爲什麼卸載無法停止/刪除服務。使用日誌記錄運行卸載可能會提供有關正在進行的操作的一些信息:「msiexec/l * v Remove.log/x InstallPackage.msi」。 – bradfordrg

回答

0

我建議您創建處理卸載的自定義操作。您可以使用卸載詳細信息創建批處理文件,然後只需從自定義操作(作爲進程)執行批處理文件即可。其良好實踐使用您的服務創建安裝和卸載批處理文件。

相關問題