Wix#和WiX相比的经验之谈

19
我们正在使用Inno Setup,并计划将其替换为WiX。但是,在评估和尝试WiX时,我感到宣告方式与编程设置解决方案相比存在一些局限性。
此外,我发现WiX文档相当匮乏。因此,我发现了Wix#(WixSharp),它承诺通过用C#编写的脚本文件以编程方式创建WiX源代码。
然而,我们遇到了一些与非常小的公司甚至“单打独斗”的负面经历。因此,我想问一下你对于Wix#(WixSharp)或其他好的替代方案的经验。您可以报告一些优点或局限性吗?

Oleg编写了最初的CsScript,该项目自2004年以来一直存在。https://github.com/oleg-shilo/cs-script/wiki 我个人很喜欢它的外观。 - CAD bloke
2个回答

19
Wix#看起来在“明年它是否存在”的得分上是一个越来越好的选择;请参见下文。请注意,现在在Wix#中构建自定义操作非常简单。
从这篇文章中: http://www.codeproject.com/Articles/31407/Wix-WixSharp-managed-interface-for-WiX 在2014年7月,Wix#以更自由的MIT许可证重新发布,现在托管在CodePlex上。 https://wixsharp.codeplex.com/ 在2014年8月,Wix#的UI扩展发布,并在此CodeProject文章中描述:“Wix#(WixSharp)UI扩展”。 http://www.codeproject.com/Articles/804584/Wixsharp-WixSharp-UI-Extensions 新的Wix#功能推出表明该产品前景良好。
由于Wix#是建立在WiX和Windows Installer技术之上的,所以它只能做WiX可能做到的事情。当Wix#无法胜任时... WiX可以做很多Wix# C#语法中没有直接提供的功能,因此通常可以直接使用WiX XML技术来弥合差距。此外,还可以查看我在这里的答案,了解更多让Wix#生成.wxs XML,并包含其他WiX XML代码并调用Candle和Light将生成的组合XML构建为MSI的示例。 以编程方式构建MSI 下面是我迄今为止经历过的WiX/Wix#优缺点的快速、非详尽列表。

WiX/Wix#优点:

  • 它生成真实的Windows Installer MSI文件。
  • 卸载特性是“免费”的;您自动获得一个可靠的卸载程序。
  • 我的环境中的服务器管理员很容易接受我作为开发人员想要安装的东西的MSI文件,因为他们信任MSI技术和卸载特性。
    • 只要使用WiX或Wix#本地语法创建它们并且不合并.reg文件,Windows注册表条目将包含在您获得的“免费”卸载中--这样您将无法得到注册表条目卸载。

WiX/Wix#缺点

  • 由于它仅限于Windows Installer功能集,因此在WiX和Wix#中执行一些“过程性”操作更加困难

WiX优点

  • 网络上提供了很多出色的示例和支持资源(“如何在WiX中执行...”)。
  • 用于收集注册表条目并放入XML WiX语句的实用程序效果良好。

WiX缺点

作为一个C#开发者,我发现直接使用XML文件来进行WiX编程是不太直观的。在开始阶段,Wix#和C#比WiX更加合理。
Wix#的优点:
- 在Wix#中实现自定义操作变得简单。 - Wix#与Visual Studio集成紧密。我目前正在使用VS2013。 - Wix#和C#比WiX XML更加合理。更好的起点。 - Wix#帮助我以更易于理解的方式学习WiX。在Wix#中看到什么有效或无效有助于理解WiX。
Wix#的缺点:
  • 目前在网络上很难找到关于Wix#示例的内容。通常需要研究WiX how-to,然后想办法将其应用到Wix#中。
  • 我没有找到自动收集注册表条目并在WiX# C#代码中表达的路径。我手动翻译了.reg文件中的条目。有必要在Wix# "RegValue("语句中具有注册表条目,以获得注册表条目的自动卸载功能。 注意:开发人员在2015年1月发布的版本中添加了此功能。我还没有尝试过。

我要说,在WiX / Wix#中执行简单且明显的操作(如在过程式安装程序(例如NSIS)和过去的基于脚本的安装程序(例如旧版Wise)中)通常需要额外的研究和创造力。

总的来说,我押注Wix#作为增长技术并为当前和未来的使用提供安全保证。最坏的情况是,您仍将拥有.wxs文件,并可以切换到使用直接的WiX XML方法构建安装程序,并且仍将从Wix#时间投资中获得价值。

Wix#产品的最新更新,用于常见的安装程序任务

截至2015年1月。见:[https://wixsharp.codeplex.com/releases/view/610843][1]

  • 现在可以导入.reg注册表设置文件,而不是手动编写注册表类条目
  • 增加了对Windows配置文件修改的支持
  • 专门支持Windows服务安装
  • 支持将参数值传递给延迟自定义操作,并自动生成所有WiX支持基础设施
  • 支持在目标系统目录中使用绝对路径,并自动生成所有WiX支持基础设施

2
编辑以添加一些有用的功能列表,这些功能是在2015年1月发布的版本中添加的。虽然在此之前大部分功能都是“可能”的,但现在它们更加流畅。例如,能够直接导入和使用.reg文件(而不是在C#中手动编写注册表条目),并仍然获得注册表条目的免费“卸载”功能,这是一个巨大的生产力提升。 - Developer63
1
我使用了"导入.reg文件"的功能并且它运作得很好。然而,我想将导入的.reg文件中的注册表设置分配给特定的Wix/Wix#"Feature ID",例如,基本安装获取一个.reg条目集,完全功能安装获取基本条目以及第二个.reg文件中的一些附加条目。对此提交了请求,开发人员表示正在为即将发布的版本解决此问题。 - Developer63

1

WiX已经存在了相当长的时间,并且有很多社区支持。我已经在业余时间里进行安装设置约8年了,从未发现过任何我无法在WiX中合理完成的事情。

这是我第一次看到WixSharp。我的第一反应是它有多稳定,因为目前版本是0.1.42。我还担心WixSharp实际上实现了多少MSI模式。它看起来很有趣,但我更喜欢使用XML文件。我真的看不出用C#做这件事有什么优势。


1
我想在安装过程中进行一些自定义操作,但我发现在Wix中并不是很方便,希望能找到更好的方法,直接在C#中使用WixSharp来实现自定义操作。你是否需要执行像启动服务或检查更多或更少复杂条件之类的自定义操作?在Wix中如何处理这些操作? - MrCube
1
回复Dan Vallejo,对我而言,使用C#比使用XML更易于理解。对于已经了解WiX XML的人来说,这可能并不重要。Wix#/C#的另一个优点是安装程序代码的可读性。我与我们的服务器管理员一起浏览了Wix#代码,向他们展示了安装程序中存在的内容(.NET COM Interop注册表项等),他们能够理解Wix#代码并因此感到舒适地在他们管理的服务器上运行安装程序。 - Developer63
@MrCube,到目前为止我还没有必须在我的安装程序中执行重要的自定义操作。我在一个安装程序中包含了一个微不足道的自定义操作,发现在Wix#安装程序中包含自定义操作非常简单。请参阅CodeProject文章中的Wix#自定义操作示例http://www.codeproject.com/Articles/31407/Wix-WixSharp-managed-interface-for-WiX。此外,在Wix#安装文件夹中有一个自定义操作示例,在Samples\AllInOne\MyAppWix.cs文件中。 - Developer63

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接