自定义安装程序类,从不调用回滚方法

时间:2009-09-16 10:28:08

标签: c# installer windows-installer rollback

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

[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方法。我没有在事件日志中看到预期的条目。

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

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

修改

提供更多详情...

安装程序是MSI包。

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

由于这是一个MSI包,我可以选择以静默模式或以用户交互方式运行它。当我编写“完整GUI模式”时,我会建立用户交互模式。

3 个答案:

答案 0 :(得分:1)

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

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

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

然后应该调用Rollback方法。

答案 1 :(得分:0)

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

有用的文章:

答案 2 :(得分:0)

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