【问题标题】:Custom Installer class , rollback method never called自定义安装程序类,从不调用回滚方法
【发布时间】:2012-08-06 08:51:30
【问题描述】:

我有一个安装程序类,这是一个 sn-p:

[RunInstaller(true)]
public partial class ServerWrapInstaller : Installer
{
    public override void Install(IDictionary stateSaver)
    {
        EventLog.WriteEntry("Installer", "Install", EventLogEntryType.Information);
        base.Install(stateSaver);
    }

    public override void Commit(IDictionary savedState)
    {
        EventLog.WriteEntry("Installer", "Commit", EventLogEntryType.Information);
        base.Commit(savedState);
    }

    public override void Rollback(IDictionary savedState)
    {
        EventLog.WriteEntry("Installer", "Rollback", EventLogEntryType.Information);
        base.Rollback(savedState);
    }

    public override void Uninstall(IDictionary savedState)
    {
        EventLog.WriteEntry("Installer", "UnInstall", EventLogEntryType.Information);
        base.Uninstall(savedState);
    }
 }

现在我以全 GUI 模式开始安装,然后在过程中间单击“取消”按钮,导致安装回滚。问题是没有调用 RollBack 方法。我在事件日志中没有看到预期的条目。

我想提一下,如果我让安装完成,我会在事件日志中看到“安装”消息,如果我随后卸载,我会在事件日志中看到“卸载”消息。但是如果中途停止安装过程,按“取消”按钮,我确实看到进度条向后退,但没有调用回滚方法。

我做错了什么?提前感谢您的帮助。

编辑:

提供更多细节...

安装程序是一个 MSI 包。

该软件包是使用安装项目在 vs2009 中构建的。安装程序类用作安装项目的自定义操作。

由于这是一个 MSI 包,我可以选择在静默模式或用户交互模式下运行它。当我写“全 GUI 模式”时,我提到了用户交互模式。

【问题讨论】:

  • 在全 GUI 模式下运行安装是什么意思?您的 ServerWrapInstaller 是否被 .msi 包或安装应用程序使用?如果是这样,您使用哪种技术来创建安装程序?
  • 马克:我编辑了帖子

标签: c# installation windows-installer rollback


【解决方案1】:

在安装过程中出现故障时会调用 Rollback 方法。手动取消安装不算。例如,您可能需要条件,检查正确的框架版本,或检查文件是否存在,然后抛出InstallException。查看链接,您可以看到一些示例。您可能希望在回滚中处理任何其他异常。

出于测试目的,您可以强制它失败。只需在您的一种方法中抛出异常,例如 install 方法。添加这一行:

throw new InstallException();
// or
throw new InstallException("Some error message here"); 

然后应该调用 Rollback 方法。

【讨论】:

  • 感谢您的评论,我确实在安装事件中植入了异常,但仍然没有调用回滚。
  • @yossi1981:而且,可以肯定的是,你尝试过没有使用 try/catch 对吗?
  • 我没有使用 try/catch ,抛出异常。我什至在安装过程中看到异常消息。
【解决方案2】:

请务必将您的自定义操作添加到自定义操作的回滚文件夹中

【讨论】:

    【解决方案3】:

    请检查您是否提供了调用自定义安装程序方法的自定义操作。

    有用的文章:

    【讨论】:

      猜你喜欢
      • 2010-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多