2

我需要关闭我的应用程序,然后删除可执行文件。我通过启动低优先级批处理作业然后立即关闭 exe 来做到这一点。有没有更好的办法?

4

4 回答 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

可能的方法

  1. 启动脚本以在退出时删除应用程序,尽管这可能会留下脚本

  2. 下次机器重新启动时使用 RunOnce 键删除可执行文件,我认为它也适用于登录和注销,但我不确定。

于 2009-02-11T05:36:20.710 回答