使用TransactedInstaller - 我还需要使用Rollback吗?

时间:2013-01-09 19:36:10

标签: .net windows-installer topshelf

我现在已经使用Topshelf 3年了,但仅限于简单的使用案例。我已经开始了一项新工作并建议使用Topshelf,但它们会覆盖Installer类的Rollback方法。例如,他们用它来调用" http delete urlacl ..."。

Topshelf没有公开BeforeRollback或AfterRollback。我并不反对提交拉取请求,但我想事先知道我是否需要回滚功能?也可能有一种使用Topshelf来处理它的方法吗?

2 个答案:

答案 0 :(得分:1)

对于TopShelf而言,他们可能有一个很好的模式来创建服务(我不知道,我从来没有使用过它们),但如果他们仍然在部署中使用自定义操作,那么他们仍然错过了这条船了解Windows Installer的工作原理。我没有对它们提出错误,因为从MSI的角度来看,有很多关于这个主题的文章并不是最理想的。

我6年前首次写到这个:

MSI vs .NET

问题始于Visual Studio部署项目,该项目未公开MSI的基础本机功能。相反,创建的安装程序类自定义操作鼓励使用更脆弱的解决方案重新发明轮子。 MSI不是关于注入流程命令式代码,而是关于声明式编程。

处理服务的更简洁方法可在以下网址找到:

Augmenting InstallShield using Windows Installer XML - Windows Services

概念是将服务封装为合并模块并添加到InstallShield。它也可以添加到Visual Studio部署项目中,也可以重构为纯WiX。

netsh命令也是如此。您不必拥有所有这些自定义代码,并尝试使所有服务策略正确。而是使用WiX的内置FirewallException Element (Firewall Extension)(再次可以封装并与其他工具一起使用),让它为您完成艰苦的工作。

如果这看起来很有趣但无法实现,那就打我,我会告诉你。在有人不愿重写书籍之前,我必须一次说服一位开发人员。

答案 1 :(得分:0)

所以我最终做的是将BeforeRollback和AfterRollback事件呈现给Topshelf的公共接口以及暴露的其他安装程序事件。我已向开发人员提交了拉取请求,但在他们接受之前,您可以在此处找到包含我的更新的来源:https://github.com/developmentalmadness/Topshelf