首页 新闻 会员 周边 捐助

C#删除服务

0
悬赏园豆:20 [已解决问题] 解决于 2013-04-26 19:03

使用下面代码删除服务,立刻是使用File.Delete删除服务exe文件,报错,被删除服务程序占用,有啥解决办法吗?

using (AssemblyInstaller myAssemblyInstaller = new AssemblyInstaller())
                    {
                        myAssemblyInstaller.UseNewContext = true;
                        myAssemblyInstaller.Path = installPath;
                        myAssemblyInstaller.Uninstall(mySavedState);
                        myAssemblyInstaller.Dispose();
                    }

裸奔的创业者的主页 裸奔的创业者 | 初学一级 | 园豆:37
提问于:2013-04-03 17:23
< >
分享
最佳答案
0

1、粗野的办法:杀死那个进程

2、给进程发退出信息

然后再删除

收获园豆:5
2012 | 高人七级 |园豆:21645 | 2013-04-03 18:36

卸载程序本身就是那个进程,杀死-重启就有点麻烦了

裸奔的创业者 | 园豆:37 (初学一级) | 2013-04-04 09:22

@裸奔的创业者: 用一个独立的进程或脚本处理卸载,就可以避免自身删除了

2012 | 园豆:21645 (高人七级) | 2013-04-04 14:22
其他回答(4)
0
邀月 | 园豆:25475 (高人七级) | 2013-04-03 23:01

上面的代码就是卸载

支持(0) 反对(0) 裸奔的创业者 | 园豆:37 (初学一级) | 2013-04-04 09:23
0

执行完上面的代码以后,你可以看看服务是不是真的删除成功了。然后再执行删除exe文件的操作。

收获园豆:5
jone_e | 园豆:1410 (小虾三级) | 2013-04-04 12:15
0

用 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

收获园豆:10
DiryBoy | 园豆:639 (小虾三级) | 2013-04-05 03:13
0

遇到了同样的问题,有人说:AssemblyInstaller 安装的服务可执行文件在安装时作为程序集加入了程序的程序域,因此在程序结束之前无法对程序集文件再次操作。显然AssemblyInstaller 对象已经释放了,难道说就没有一句代码可以释放对服务文件的占用?

黑衫老腰 | 园豆:208 (菜鸟二级) | 2020-10-23 21:39
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册