【问题标题】:Self Deleting Executable (Uninstaller)自删除可执行文件(卸载程序)
【发布时间】:2019-12-05 03:21:05
【问题描述】:

我正在尝试制作卸载程序。 我基本上需要能够删除程序文件中包含卸载程序的目录。

我正在考虑让卸载程序将自身创建一个副本到临时文件夹, 然后让从程序文件夹运行的卸载程序在 temp 中打开卸载程序并在继续卸载的地方关闭自身。

问题是,如何删除临时文件夹中的卸载程序...

【问题讨论】:

  • MSI 卸载程序。您不会删除 msiexec.exe。简单地开始一个安装项目,避免重新发明那个轮子。
  • 知道了,但我更喜欢我的方式。我怎么能做一个像自删除exe这样的事情
  • 您可以在 Visual Studio 中创建安装项目。否则,您可以运行 bat 文件来运行可执行文件,然后删除可执行文件、bat 文件和文件夹。
  • 一个自删除的 EXE 将触发人类已知的所有病毒扫描程序。对于安装程序来说,这不是一个好主意,尤其是当这个问题已经解决时。
  • @CodyGray:有趣,但 NSIS 卸载程序没有这样的问题。

标签: c# uninstallation


【解决方案1】:

查看:https://www.catch22.net/tuts/win32/self-deleting-executables

他有多种解决方案 - 但主要针对 C++ 代码。

我目前正在尝试在 C# 中实现“DELETE_ON_CLOSE”方法。

对所有反对者的评论: MSI 并非在所有情况下都能解决此问题。就我而言,我的应用程序需要安装到一个网络文件夹,任何网络用户都可以在其中运行该应用程序。它还需要支持从任何网络工作站升级和卸载 - 不一定是安装应用程序的同一工作站。这意味着我无法将卸载程序注册到本地计算机上的“添加/删除程序”列表中。我必须创建一个卸载到安装文件夹中的 Uninstall.exe。 MSI 不支持,所以我必须自己写。

【讨论】:

    【解决方案2】:

    尽管我同意每个人都说你不应该这样做,但你可以做的是:

    1. 让您的程序在其正在运行的操作系统的临时文件夹中创建一个可执行文件(和配置文件)。
    2. 让您的程序作为独立进程启动,然后退出。
    3. 然后该可执行文件回调实际的设置内容。
    4. 设置完成后,临时可执行文件可以删除设置文件。
    5. 由于您的程序的唯一痕迹现在位于 temp 文件夹中,因此它最终会自动清除。

    【讨论】:

    猜你喜欢
    • 2014-09-13
    • 2010-12-09
    • 1970-01-01
    • 2013-02-20
    • 1970-01-01
    • 1970-01-01
    • 2017-04-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多