Windows 上能不能做到:覆盖正在运行中的 exe?或者删除运行中的 EXE?

2022-12-17 09:37:19 +08:00
 seakingii

是这样的,我会在 A 目录保存一个 EXE 程序并一直运行它,作为一个 WEB 服务 但有时我可能会修改重新编译,编译成功后我想用脚本复制到 A 目录覆盖那个 EXE 程序 但因为 EXE 在运行,无法覆盖,会提示:"另一个程序正在使用此文件,进程无法访问"

我想删除这个 EXE 再复制,也不行:"拒绝访问"

我记得 LINUX 是可以删除运行中的程序,然后再复制的,WINDOWS 是不是没有这样的功能?

1318 次点击
所在节点    Windows
6 条回复
codehz
2022-12-17 10:08:57 +08:00
可以删除,先打开文件的 handle ,然后把这个 handle 放到 NtDeleteFile 的 ObjectAttributes.RootDirectory 里
或者使用 posix 删除语义 FILE_DISPOSITION_POSIX_SEMANTICS 我记得也可以?
(不过实际上是移动到 c:\\$extend\$deleted\fileid 里,某些进程管理器能看到
如果要真正删除的话,得预先准备一下,把 exe 写入到文件额外数据流里,运行起来后,再把源文件用上述方法删除,这样就找不到任何痕迹了
NewYear
2022-12-17 10:34:20 +08:00
Windows 可以重命名,再复制或者移动一个文件过来
zyxk
2022-12-17 10:40:18 +08:00
直接重命名原文件后, 在写入原文件名的文件, 应该是最简单的了吧
seakingii
2022-12-17 10:58:11 +08:00
@NewYear 真的可以重命名!感谢!
seakingii
2022-12-17 10:58:37 +08:00
@NewYear 真的可以重命名!感谢!..
seakingii
2022-12-17 10:59:49 +08:00
@codehz 太深奥了,看不懂,不过还是感谢指点...

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/903087

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX