【问题标题】:How can modify the windows service exe after its get stopped?windows服务exe停止后如何修改?
【发布时间】:2012-07-11 11:41:20
【问题描述】:

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

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

【问题讨论】:

    标签: c# windows-services io


    【解决方案1】:

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

    【讨论】:

    • 不。停止服务并替换exe就足够了。
    • 感谢您提供此信息。 .NET 隐藏了这些底层活动。
    • 请留下面向scm的概念,而不是看到,服务停止后复制粘贴服务文件的主要原因是什么..
    【解决方案2】:

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

    尝试在复制文件之前等待最多 1 分钟。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多