如何在停止后修改windows服务exe?

时间:2012-07-11 11:41:21

标签: c# windows-services io

我在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”,因为它正由另一个进程使用。

但是我可以肯定我的服务没有任何依赖,我找不到停止后替换服务文件的方法,请帮我解决问题。

2 个答案:

答案 0 :(得分:0)

我不确定它在C#中是如何工作的,但在C ++中,您最终需要首先从服务控制管理器(SCM)基础结构中取消注册该服务,然后才能删除二进制文件。

答案 1 :(得分:0)

您无需卸载服务即可升级它。我经常通过文件副本升级服务。

请在复制文件前等待最多1分钟。

看看wyUpdate。 AutoUpdater进程是开源的,您可以看到他们如何处理它。 (无论如何我推荐产品。)

那就是说,它没有真正的魔力;如果你在一分钟左右之后仍然无法复制.exe,那么还会发生其他事情。