删除自己的程序

时间:2009-08-04 07:01:53

标签: vb.net installation

我需要编写一个程序,在运行时删除自己...如何在vb.net中执行以及执行此操作的概念是什么..

4 个答案:

答案 0 :(得分:4)

要让一个程序字面上删除自己而没有任何跟踪,你需要至少询问其他人在关闭后删除你的(最后)可执行文件。这是因为正在运行的可执行文件正在使用中,如果从正在运行的代码中删除它,则会出现共享冲突。

我认为,您可以使用Windows来执行此操作,使用命令行的注册表设置在Windows启动时运行。您可以在那里放置`删除[可执行文件的完整路径]。 (如果您确实需要,可以使用Google进行正确的注册表设置。)

另一个好的选择似乎是Aamir回复中的第一个链接:在退出可执行文件之前,您启动另一个使用Windows部分等待然后删除可执行文件的进程。

另一个选择是确保您拥有正确的安装程序包(例如MSI程序包),该程序包使用您所在的操作系统(例如Windows)的安装程序子系统(例如MS Installer)执行所需的操作。但这只适用于您的应用程序完全需要完整安装程序的情况。

它的工作方式如下:当用户卸载时,让安装程序包确保当前没有运行应用程序可执行文件。它可以向用户显示它并在继续之前要求关闭应用程序,或者它可以在确认后终止其进程。在此之后,它可以删除程序包安装的所有文件,包括可执行文件。

在VisualStudio的VB.NET / C#中,您可以使用Custom Installer类添加“确保我的可执行文件未运行”逻辑。或者使用第三方安装程序工具创建可以自动为您执行此操作的安装程序包。

答案 1 :(得分:3)

答案 2 :(得分:2)

如果您的目标是运行您的EXE,然后将其早晚删除,则有以下几种选择:

1)MoveFileEx() API

如果指定“MOVEFILE_DELAY_UNTIL_REBOOT”标志,并从“your.exe”重命名为“”,则Windows将在下次重新启动时将其删除。

2)安排清理行动

使用命令行AT命令SchTasks.exe或the more sophisticated TaskManager API,您可以安排任务“稍后”运行,这样做:

  

%SYSTEMROOT%\ CMD.EXE / C RMDIR / S / Q.   

答案 3 :(得分:1)

您可以在AppDomain中启用卷影副本,并让运行时删除程序的缓存副本。

请参阅http://blogs.msdn.com/junfeng/archive/2004/02/09/69919.aspx