我需要关闭我的应用程序,然后删除可执行文件。我通过启动低优先级批处理作业然后立即关闭 exe 来做到这一点。有没有更好的办法?
Kieran
问问题
697 次
4 回答
2
有来自sysinternals的 PendMoves 和MoveFile实用程序。根据文档,您可以使用 movefile 通过指定一个空目标在下次启动时删除文件:
movefile your.exe ""
此实用程序通常用于删除顽固的恶意软件,但我不确定它是否会在关闭后立即删除您的应用程序,或者仅在下次重新启动时删除。
该实用程序使用MoveFileEx API,因此如果您愿意,可以使用该 API 来实现相同的效果。
于 2009-02-11T05:29:53.110 回答
2
只要您不在 Windows 95/98/ME 上,MoveFileEx 就可以工作(我希望不是...)。但是,您不能删除您的 exe 所在的文件夹。如果这不是问题,请遵循 Ryan 的建议。
这篇文章基本上记录了做你想做的每一种方式。
于 2009-02-11T05:35:21.727 回答
1
只要可执行文件中的任何代码都在内存中,就无法将其删除,但您可以尝试其他一些操作:
- 告诉
MoveFileEx
将删除推迟到下次重新启动是安装/卸载代码通常使用的一种方法。 - 使用任务计划程序安排
cmd.exe /c del c:\path\myprog.exe
从现在开始运行 60 秒,然后立即退出,以便有机会成功。 - 批处理文件运行良好,实际上可以删除自己,因为批处理文件在行之间关闭。
如果您使用的是批处理文件方法,请考虑以下内容:
:loop
ping -n 6 127.0.0.1
del /y %1
if exist %1 goto :loop
del byebye.bat
这里的ping
命令被滥用来插入延迟,因为sleep
它不是 Windows 上的标准命令。该循环使批处理能够等待它的时间,直到它可以实际删除可执行文件。
于 2009-02-11T05:37:25.560 回答
0
可能的方法
启动脚本以在退出时删除应用程序,尽管这可能会留下脚本
下次机器重新启动时使用 RunOnce 键删除可执行文件,我认为它也适用于登录和注销,但我不确定。
于 2009-02-11T05:36:20.710 回答