我在Windows应用程序产品中工作,这里我需要替换服务exe(安装目录)以进行升级,所以我已经停止服务并尝试用给定代码替换exe
ServiceController service = new ServiceController(servicename);
service.Stop();
service.WaitForStatus(ServiceControllerStatus.Stopped);
Thread.Sleep(10000);
System.IO.File.Copy(application.exe, newapplication.exe, true);
,它抛出了如下所示的错误,
该进程无法访问文件“C:\ Program Files \ Myapp \ application.exe”,因为它正由另一个进程使用。
但是我可以肯定我的服务没有任何依赖,我找不到停止后替换服务文件的方法,请帮我解决问题。
答案 0 :(得分:0)
我不确定它在C#中是如何工作的,但在C ++中,您最终需要首先从服务控制管理器(SCM)基础结构中取消注册该服务,然后才能删除二进制文件。
答案 1 :(得分:0)
您无需卸载服务即可升级它。我经常通过文件副本升级服务。
请在复制文件前等待最多1分钟。
看看wyUpdate。 AutoUpdater进程是开源的,您可以看到他们如何处理它。 (无论如何我推荐产品。)
那就是说,它没有真正的魔力;如果你在一分钟左右之后仍然无法复制.exe,那么还会发生其他事情。