【发布时间】:2017-03-17 07:44:54
【问题描述】:
我有一个使用托管语言 (.NET Framework v4.0) 编写的 Windows 服务,该服务当前正在运行。
由于某种原因,我可以在服务运行时重命名服务主可执行文件。 我怀疑该文件在服务运行时被 Windows 锁定,但事实并非如此。 更有趣的是,重命名后它仍然存在于任务管理器中。
我没有抱怨这是可能的,但我想知道为什么。有人对此有解释吗?
【问题讨论】:
-
Windows 服务没有什么特别之处,特别是。见this SuperUser question
-
功能,不是错误。操作系统会锁定文件数据,而不是目录条目。这是在程序运行时为程序安装更新的基本方式。
-
在服务重新启动之前,它不会获取新的可执行映像。依赖此机制的更新过程很容易出现不一致,如果它们无法执行服务控制命令(例如由于缺少权限) - 并且系统最终处于文件是新文件但服务正在运行的状态一张老照片未被注意到。然后突然,当服务器重新启动时,更新中的功能更改或错误变得明显。不仅在生产环境中见过一次,而且从那以后就避免了。
-
这个问题没有具体的 C#/.net 内容。试图回答它,但看到它作为题外话关闭并不感到惊讶,尽管在其他 SE 网站上重复 are not necessarily off-topic
-
@CeeMcSharpface 这正是发生在我身上的事情:成功安装了新版本的 Windows 服务,但安装程序无法停止当前正在运行的服务(顺便说一句,这是另一个 Windows 功能),最终运行旧版本而