【问题标题】:Why is the Uninstall method not being called during installation?为什么在安装过程中没有调用 Uninstall 方法?
【发布时间】:2011-03-30 12:02:08
【问题描述】:

我知道有other 的问题是similar,但要么没有正确回答,要么答案没有解决我的问题。

我的程序有一个主框架以及该框架的各种插件。插件通过 XML 文件进行管理,该文件包含框架动态加载插件所需的信息。

我有一个通用的Installer 类,用于处理插件安装期间的自定义操作。

在安装过程中,它需要加载 XML 文件并在其中添加一个新节点,列出加载插件所需的信息。

在卸载过程中,它只需要从 XML 文件中删除相同的节点。

安装工作正常。当我尝试卸载插件时,Installer 的卸载方法甚至没有被调用。

如果需要更多信息,请随时询问。

【问题讨论】:

    标签: c# visual-studio-2010 deployment windows-installer


    【解决方案1】:

    我遇到了同样的问题,卸载方法没有被执行。 在我卸载了目标位置中的设置和所有文件后,我删除了注册表中包含设置名称和主输出文件名的所有引用。 (Visual Studio 使用的那些键值除外) 之后,卸载方法再次执行。 看起来像以前的安装不成功,在注册表中没有很好地清理。

    【讨论】:

      【解决方案2】:

      尝试删除卸载自定义操作保存项目,然后重新添加。另外,如果要调试安装包,可以添加以下内容:

      Debugger.Launch();
      

      在重写方法的开始,而不是使用消息框。

      【讨论】:

      • 尝试删除它并再次添加它(实际上是几次)。我不知道Debugger.Launch(),但是当将它添加到 4 种不同类型的自定义操作的开头时,只有InstallCommit 的操作正在启动调试器。
      【解决方案3】:

      您是否确认自定义操作配置正确?我建议您在各处放置一些 MessageBox,以便您可以跟踪正在发生的事情。

      【讨论】:

      • 这就是我知道Uninstall 方法没有被调用的方式。我在 4 个动作中的每一个中都有一个 MessageBox,因此我可以准确地知道每个动作何时被调用。 InstallCommit 被调用,RollbackUninstall 没有被调用。我现在真的不关心Rollback,只关心Uninstall
      • 您已确认“InstallerClass”在该自定义操作中为“真”并且它指向正确的程序集?
      • 是的,适用于所有四种自定义操作类型。
      • 安装程序类所在的DLL在卸载时是否还在安装目录中?
      • 是的。我曾经遇到的一个问题是一个插件会删除它,从而导致随后删除另一个插件失败。通过在安装程序的文件系统配置中设置相应的属性,将Installer 的 dll 设置为永久可修复此问题。 (但请注意,我已尝试在快速测试中将 Permanent 保留为 false(这是默认值),以查看这是否导致 Uninstall 问题)。
      【解决方案4】:

      你试过here提到的解决方案吗

      我相信有时 Visual Studio 会进行就地升级,但实际上并没有卸载旧版本。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-23
        • 2019-11-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-01
        相关资源
        最近更新 更多