2015-05-14 101 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

我建议您创建处理卸载的自定义操作。您可以使用卸载详细信息创建批处理文件,然后只需从自定义操作(作为进程)执行批处理文件即可。其良好实践使用您的服务创建安装和卸载批处理文件。

相关问题