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

C# 自定义安装程序类,从未调用回滚方法,c#,installation,windows-installer,rollback,C#,Installation,Windows Installer,Rollback,我有一个安装程序类,下面是一个片段: [RunInstaller(true)] public partial class ServerWrapInstaller : Installer { public override void Install(IDictionary stateSaver) { EventLog.WriteEntry("Installer", "Install", EventLogEntryType.Information);

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

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

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

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

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

然后应调用回滚方法。

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

有用的文章:


确保将自定义操作添加到自定义操作的回滚文件夹中

以完整GUI模式运行安装是什么意思?您的ServerWrapinInstaller正在被.msi包或安装应用程序使用吗?如果是,您使用了哪种技术来创建安装程序?马克:我编辑了帖子谢谢您的评论,我在安装事件中植入了一个异常,但仍然没有调用回滚。@yossi1981:当然,您没有正确使用try/catch来尝试它?我没有使用try/catch,异常被抛出。我甚至在安装过程中看到异常消息。