程序如何删除自己的可执行文件
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 程序中写入自己的可执行文件,错误“文本文件忙”