使用下面代码删除服务,立刻是使用File.Delete删除服务exe文件,报错,被删除服务程序占用,有啥解决办法吗?
using (AssemblyInstaller myAssemblyInstaller = new AssemblyInstaller())
{
myAssemblyInstaller.UseNewContext = true;
myAssemblyInstaller.Path = installPath;
myAssemblyInstaller.Uninstall(mySavedState);
myAssemblyInstaller.Dispose();
}
1、粗野的办法:杀死那个进程
2、给进程发退出信息
然后再删除
卸载程序本身就是那个进程,杀死-重启就有点麻烦了
@裸奔的创业者: 用一个独立的进程或脚本处理卸载,就可以避免自身删除了
上面的代码就是卸载
执行完上面的代码以后,你可以看看服务是不是真的删除成功了。然后再执行删除exe文件的操作。
用 Windows SDK 提供的命令行工具就行了。
installutil.exe /u TargetName.exe
http://msdn.microsoft.com/en-us/library/sd8zc8ha(v=vs.110).aspx
http://msdn.microsoft.com/en-us/library/50614e95(v=vs.110).aspx
遇到了同样的问题,有人说:AssemblyInstaller 安装的服务可执行文件在安装时作为程序集加入了程序的程序域,因此在程序结束之前无法对程序集文件再次操作。显然AssemblyInstaller 对象已经释放了,难道说就没有一句代码可以释放对服务文件的占用?