Warm tip: This article is reproduced from serverfault.com, please click

c#-如何使.NET应用程序自我擦除?

(c# - How can I make my .NET application erase itself?)

发布于 2010-02-11 14:49:39

如何使C#应用程序自身擦除(自毁)?我认为可能有两种方法:

  • 提供另一个删除主程序的程序。但是,如何删除该删除程序?
  • 创建一个等待几秒钟的CMD进程,然后删除你的文件。在那几秒钟内,你将关闭应用程序。

这两种方法似乎都是无效的。我感觉Windows中有一些内置的标记或某些东西允许这种东西。我该怎么办?另外,你可以提供一些示例代码吗?

更新:感谢你的所有回答!我将尝试它们,看看能带给我什么。

首先,有人问我为什么要我的应用程序执行此操作。答案是这样的:几天前,我阅读了Joel Spolsky在他的博客上发布的Project Aardvark规范,其中提到客户端应用程序将在远程会话后自行删除。我想知道这是如何工作的,以及如果需要的话,如何才能实现这样的壮举。

以下是有关建议的一些概述:

  • 创建一个注册表项,通知Windows在重新启动时删除该文件
  • 使用ping命令启动CMD,等待几秒钟,然后删除文件

正如评论中所概述的,这两种方法当然都有其缺点。

但是,下面概述的这种方法行得通吗?

有两个可执行文件:Program.exe和Cleaner.exe。前者是程序本身,后者是删除Program.exe及其本身的应用程序(如果将其加载到内存中,正如我将要解释的那样)。Program.exe(具有依赖项)是否可以将不具有任何依赖项的Cleaner.exe全部加载到内存中并运行它?

如果可以,Cleaner.exe是否可以打包在Program.exe中,加载到内存中并运行?

Questioner
Maxim Zaslavsky
Viewed
11
Anton Gogolev 2010-02-11 22:52:46

有一个MoveFileEx API,当给出一个MOVEFILE_DELAY_UNTIL_REBOOT标志时,它将在下次系统启动时删除指定的文件。