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");
然后应调用回滚方法。请检查是否提供了调用自定义安装程序方法的自定义操作 有用的文章: