程序如何删除自己的可执行文件

ata*_*ata 29 windows file process

有没有办法让正在运行的进程可以删除自己的可执行文件?

例如,我创建一个控制台应用程序(单个exe),并在执行某些任务后以某种方式删除exe文件.

我必须向某人发送一个文件.我希望它在完成预定任务后删除.

无论如何都要在Windows中执行此操作

Gre*_*ill 19

一种方法是使用带标志和目标的MoveFileEx函数.根据文档,这个:MOVEFILE_DELAY_UNTIL_REBOOTNULL

注册系统重新启动时要删除的lpExistingFileName文件.如果lpExistingFileName引用目录,则仅当目录为空时,系统才会在重新启动时删除目录.

  • Windows只会根据需要加载尽可能多的可执行文件,因此它不会(a)占用太多RAM或(b)如果没有足够的RAM,则必须再次将可执行文件写入交换文件.您可以将Windows运行的每个可执行文件视为临时只读交换文件.如果需要丢弃一页RAM,Windows可以简单地丢弃它,因为它知道必要时可以从EXE文件重新加载. (12认同)
  • 我不明白为什么我们不能删除它因为exe被加载到RAM,所以为什么它需要与硬盘通信? (2认同)
  • 这种方法过于依赖重启。毫无疑问它会起作用,但我想尽快删除该文件。 (2认同)
  • @GregHewgill 问题并不是真正的需求分页 - Linux 也这样做,但支持删除正在运行的可执行文件。由于可以镜像常规文件的行为,因此这似乎是对 Windows 上可执行文件的故意限制。 (2认同)
  • 在最新版本的 Windows 中,这需要管理员权限。 (2认同)

Sam*_*rif 18

process.start("cmd /c ping localhost -n 3 > nul & del filepath")
exit
Run Code Online (Sandbox Code Playgroud)

用您的编程语言用于启动带参数的程序的任何命令替换process.start

用你的exe的路径替换filepath

使用命令替换exit以终止程序

  • 如果您不使用 XP,则可以通过传递“”/C choice /CY /N /DY /T 3”来避免 ping-workaround(cmd 命令本身将等待 3 秒):https://www.codeproject .com/Articles/31454/How-To-Make-Your-Application-Delete-Itself-Immedia (3认同)

Ale*_*ort 7

您可以使用 Windows 调度程序来安排任务以在 X 秒后删除您的程序。

命令行:http : //msdn.microsoft.com/en-us/library/bb736357%28VS.85%29.aspx

或 API:http : //msdn.microsoft.com/en-us/library/aa383608%28VS.85%29.aspx


uck*_*man 5

在Linux上可以这样做。您会发现在Windows上通常无法删除正在运行的可执行文件。但是,您可以让Windows在下次重新启动时为您删除EXE:http : //www.howtodothings.com/computers/a1402-delete-a-running-exe.html

如果要在文件运行后将其删除,则可以简单地要求用户将其删除。如果您希望这样做的原因是出于安全考虑,那么您在做什么是错误的。用户可以通过简单地首先制作文件的副本来规避此问题。