2

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

但是我可以确定我的服务没有任何依赖关系,我在停止后找不到替换服务文件的方法,请帮助我摆脱这个问题。

4

2 回答 2

0

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

于 2012-07-11T11:44:11.450 回答
0

您无需卸载该服务即可对其进行升级。我经常通过文件复制升级服务。

尝试最多等待 1 分钟,然后再复制文件。

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

也就是说,它没有真正的魔力。如果您在一分钟左右后仍然无法复制 .exe,则说明发生了其他事情。

于 2012-07-11T11:48:41.630 回答