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

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

例如,我做一个控制台应用程序(单个EXE),做了一些任务后,它以某种方式删除EXE文件。

我必须发送一个单一的文件给某人。 我希望在完成预定的任务后将其删除。

有没有在Windows中做到这一点

一种方法是使用带有MOVEFILE_DELAY_UNTIL_REBOOT标志和NULL目标的MoveFileEx函数。 根据文件,这个:

注册系统重新启动时要删除的lpExistingFileName文件。 如果lpExistingFileName指向一个目录,则只有当目录为空时,系统才会在重新启动时删除该目录。

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

使用编程语言用来启动具有参数的程序的任何命令来replaceprocess.start

将filepathreplace为您的exe的path

用命令终止你的程序replace退出

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

如果您想在运行文件后删除文件,您可以直接要求用户删除文件。 如果你想要这个的原因是作为安全措施,那么你在做什么是错误的。 用户可以通过简单地制作一个文件副本来绕过这个问题。

您可以使用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

您可以运行另一个应用程序,这将等待父进程终止,然后删除其可执行文件。

直到该exe文件在内存中,它将无法删除自己。 但是可以在系统完成执行后的一定时间段内向系统注册一个删除任务。

我通过创build在进程仍在运行时执行的batch file解决了这个问题(使用Visual Basic),等待1秒,以便程序可以closures自身而不是删除程序。

您可能需要修改它将删除同一个文件夹中的所有东西。 你的任务后,只要调用del() ,它应该工作。

  Sub del() Dim file As System.IO.StreamWriter file = My.Computer.FileSystem.OpenTextFileWriter("del.bat", True) file.WriteLine("") file.WriteLine("timeout 1") file.WriteLine("echo Y | del *.*") file.Close() Process.Start("del.bat") Me.Close() End Sub