gpt4 book ai didi

windows - 为什么我可以在运行时重命名 Windows 服务可执行文件?

转载 作者:可可西里 更新时间:2023-11-01 11:46:47 25 4
gpt4 key购买 nike

我有一个用托管语言 (.NET Framework v4.0) 编写的 Windows 服务,目前正在运行。

出于某种原因,我能够在服务运行时重命名服务主要可执行文件。我怀疑该文件在服务运行时被 Windows 锁定,但事实并非如此。更有趣的是,重命名后它仍然存在于任务管理器中。

我不是在提示这是可能的,但我想知道为什么。有人对此有解释吗?

最佳答案

取自this answer on superuser ,和 How can we overwrite EXE files while users are running them? ,

未独占锁定的可执行文件可以重命名。 Windows 服务管理器获取服务可执行文件的文件句柄,只要服务运行它就会保持打开状态,并且完全不受重命名的影响。它不会锁定目录条目本身。因此可执行文件可以被其他进程读取,文件的目录条目可以重命名。

影响:

  • 重命名后,可以放置不同版本的文件。
  • 如果您或自动更新过程未能放置新版本,则指向该可执行文件的任何服务将无法在下次启动(重新启动/重新启动时)
  • 如果新版本有问题,如错误或缺少依赖项,服务可能无法在下次启动(重启/重启时)
  • 当您放置新版本但未能立即重新启动服务时,它将在未来的任何时间变为事件状态,这在生产环境中不像管理员(和用户)那样。

建议:

  • 不要依赖这个机制。让您的更新过程停止服务。当您的更新过程没有足够的权限时,更新失败。然后替换可执行文件和所有依赖项,并重新启动服务。

关于windows - 为什么我可以在运行时重命名 Windows 服务可执行文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42851917/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com