0

我有一个安装程序类,这是一个片段:

[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 模式”时,我提到了用户交互模式。

4

3 回答 3

1

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

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

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

然后应该调用 Rollback 方法。

于 2009-09-16T11:36:08.883 回答
0

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

于 2010-12-10T16:54:43.720 回答
0

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

有用的文章:

于 2010-06-02T02:07:11.457 回答