自删除C#应用程序

时间:2013-09-07 01:58:12

标签: c# .net

Hello开发人员,

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

现在,不要误以为我是一个懒得做研究的人。我已经做了一些自己的实验(好吧,实际上并没有多少实验,因为File。功能似乎不能完成这样的任务 - 这并不奇怪,在删除正在运行的应用程序时,Windows是非常不情愿的)

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

2 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分:0)

您的问题已经被问到here

您可以使用MoveFileEx API执行此操作,它会为您提供MOVEFILE_DELAY_UNTIL_REBOOT标志,该标志将删除您在下次系统启动时所需的内容。