2

各位开发者您好,

现在,在我的一个创造性失眠课程中,我在学习 C# 的同时一直在研究我的一个项目,我碰巧想知道 - 有没有办法创建一个自删除应用程序?

现在,不要把我误认为是一个懒得做研究的人。我自己做了一些实验(好吧,实际上并没有太多的实验,因为 File.function 似乎无法完成这样的任务 - 不足为奇,Windows 在删除正在运行的应用程序时相当不情愿) .

我做了一些研究,结果发现我的一些担心是真的——这样的功能需要执行命令行进程或 MOVEFILE_DELAY_UNTIL_REBOOT 标志。第二个选项绝对没有问题,而第一个选项仍然有些混乱。因此我很好奇——这里有没有经验更丰富的 CSharp 开发人员找到另一种方法来做到这一点?(从理论上讲,这听起来确实不可能。但我会愚蠢地低估其他开发人员)

4

2 回答 2

1

可能的方法...未测试...

您可以考虑使用另一个FILE_FLAG_DELETE_ON_CLOSE标志。CreateFile

  • 使用此标志创建临时文件并将您的可执行文件复制到那里。
  • 从该位置启动第二个实例并将路径作为参数传递到自己的位置
  • 在第二个实例开始后(需要一些同步或基本Sleep的学习目的)
  • 在新实例中删除第一个文件(可能会重试直到第一个实例退出)并退出。

此时第二个文件应该没有句柄,并且也会被操作系统删除。

于 2013-09-07T03:00:04.107 回答
0

你的问题已经在这里问过了。

您可以通过使用 MoveFileEx API 来做到这一点,它为您提供 MOVEFILE_DELAY_UNTIL_REBOOT 标志,它将在下次系统启动时删除您想要的内容。

于 2013-09-07T03:37:45.673 回答