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

问题描述 投票:25回答:8

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

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

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

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

windows file process
8个回答
18
投票

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

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


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

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

用你的exe的路径替换filepath

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


4
投票

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

如果您希望文件在运行后被删除,您可以简单地要求用户删除它。如果你想要这个的原因是一个安全措施,那么你所做的就是误入歧途。用户可以通过简单地首先复制文件来避免这种情况。


3
投票

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


2
投票

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


0
投票

直到该exe在内存中,它将无法删除自己。但是,它可以向系统注册一个任务,用于在预期完成执行的设定时间间隔之后删除自身。


0
投票

我通过创建在进程仍在运行时执行的批处理文件解决了这个问题(使用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

0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.