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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了程序如何删除自己的可执行文件相关的知识,希望对你有一定的参考价值。

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

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

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

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

答案

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

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

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

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

用你的exe的路径替换filepath

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

另一答案

可以在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在内存中,它将无法删除自己。但是,它可以向系统注册一个任务,用于在预期完成执行的设定时间间隔之后删除自身。

另一答案

我通过创建在进程仍在运行时执行的批处理文件解决了这个问题(使用Visual Basic),等待1秒钟,程序可以自行关闭,然后删除程序。

您可能需要修改它,这将删除同一文件夹中的所有内容。你的任务刚刚调用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
另一答案

虽然在文件运行时无法自行删除文件,但可以从文件中启动分离的cmd命令,然后在执行命令之前结束文件操作。因此,如果要删除bat文件,只需在文件末尾添加以下行:start cmd /c del %0,该文件将自毁。

start cmd将启动一个新的cmd窗口(与主进程分离)。 /c告诉窗户执行在线路中的/c之后发生的任何事情。然后del将在给定的路径中删除该文件。参数$0指的是第一个命令行参数,它通常是执行文件的名称和路径,这就是我们想要的。 ($0参数是文件的路径,您希望将其传递给del命令)。

以上是关于程序如何删除自己的可执行文件的主要内容,如果未能解决你的问题,请参考以下文章

在 Linux C 程序中写入自己的可执行文件,错误“文本文件忙”

如何在Makefile中命名我自己的可执行文件?

如何使用 xcode5 在 Mac 应用程序中对捆绑的可执行文件进行代码签名

程序编译链接后形成的可执行文件是啥文件

降级会删除新版本的可执行文件,但不会重新安装旧版本

“此文件包含病毒并已被删除”在我构建的可执行文件(和代码签名)上