【问题标题】:Self-deleting C# Application [duplicate]自删除 C# 应用程序 [重复]
【发布时间】:2013-09-07 01:58:12
【问题描述】:

各位开发者您好,

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

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

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

【问题讨论】:

  • 为什么第一个“乱七八糟”?
  • 所以你想在你自己的应用程序中删除你自己的应用程序。对吗?
  • muratgu,好吧,混乱可能不是最好的选择。基本上,如果可以的话,我宁愿避免使用命令行。 sudhAnsu63,正是。正如我在帖子中已经指出的那样,根据我的理解,这应该是不可能的,尽管我内心深处仍然相信有人可能已经找到了办法。 jwrush,它不是重复的。请阅读整篇文章,而不是根据线程的名称来假设:)
  • @Applebough 这个问题的措辞略有不同,但答案是一样的。

标签: c# .net


【解决方案1】:

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

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

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

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

【讨论】:

  • 我对结果很好奇。请有人测试这种方法!
【解决方案2】:

您的问题已经被问到here

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

【讨论】:

    猜你喜欢
    • 2015-08-22
    • 2020-02-29
    • 2012-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多