为什么要使用Windows安装程序XML(WiX)时,我们已经内置.net MSI安装程序?为什么使用Windows Installer XML(WiX)而不是VDPROJ?
回答
的introduction of WiX tutorial提供有关WiX的优点,但相比其他安装开发工具(包括VS安装项目)的基本思想是:
- 声明的方式
- 不受限制地访问到Windows 安装程序的功能
- 源代码,而不是基于GUI的 组件的信息的
- 完全集成到应用 构建处理
- 与应用 开发团队开发
- 支撑的可能整合,既 内部和第三方
- 免费,开源
希望这有助于。
- 我们有些人不想使用/不能使用.NET安装程序。
- 我们中有些人不希望有安装Visual Studio来分发程序,写,说,Borland的Delphi。 WiX和.NET没有任何关系。
- 维克斯provdes一个更完整的功能设置比.NET安装程序。
的Visual Studio部署包只能由Visual Studio来构建。它们不能使用简单的MSBuild命令行来构建,这使得它们不太适合例如构建服务器。
这就是我玩WiX的原因 - 让我整理一些实用程序应用程序,我想从我的构建服务器中作为工件 – Murph 2010-04-14 09:38:19
,这使我小时咆哮约我讨厌VDPROJ一切。我不会因为我的(专家)意见,它已经解决了VDPROJ糟糕的法律。如果你的安装非常简单,以至于你没有注意到任何问题,那么请做出我的猜测并坚持下去。但是,如果你已经发现自己正在与该工具作斗争,试图让它做不该做的事情,那么接受我的建议并快速转储它以用于WiX。
10件事情我恨VDPROJ
- 没有MSBuild的支持。当然,你可以用命令 来呼叫devenv,但它不是很好。
- 否 组分的临界概念的曝光。每个文件/注册表项都是它自己组件的密钥文件。
- 没有有效的方法来完全排除自动依赖扫描。
- 快捷方式总是广告
- 无法描述服务。
- 无法描述导致过度使用自定义 动作的许多事情。
- 无法精确控制自定义操作的调度/执行。太抽象了。
- 抽象是错误的。推迟 CA的计划与模拟在Vista上打破。
- 各种限制导致您在构建MSI 期间按摩内置所有限制的路径。结果在 非常糟糕的构建自动化黑客攻击。
- 合并模块目录表 的创作不正确。
- 其他100件事吸我现在不记得 。
别憋气,说出你的意思:-) – 2010-04-14 13:27:14
我花了一辈子的时间在一个拥有数千个vdproj合并模块和超过1000个InstallUtil自定义操作的环境中工作,并且使用小船负载的构建自动化黑客来完成所有工作。我从非常深刻的经历中了解到VDPROJ很糟糕,我不希望它成为我的敌人。 – 2010-04-14 16:24:22
我同意这一点,+1。我认为VDPROJ根本不应该使用,但我知道[** Chris Painter找到了一些附带用途**](http://blog.deploymentengineering.com/2011/03/redemption-of-visual-studio -deployment.html)在撰写此答案之前或之后的项目类型。这并没有改变项目类型基本上都是麻烦的事实。当需求奇怪时,专家可能会做一些错误的事情。 – 2014-10-30 20:30:54
以上所有答案都包含了大多数Visual Studio安装项目(.VDPROJ)的烦人功能,这是大多数人错过的一件事。
.VDPROJ文件格式是这样的,如果我们做一个小 变化到一个单一入口它彻底改写所有条目 在其中使得它不可能从2个不同的 分支合并改变。
- 1. 为什么有Windows Installer 4.5使用ClickOnce
- 2. WiX,Windows Installer摘要?
- 3. 为什么安装4.5时WiX检测到Windows Installer 4.05?
- 4. 为什么VS 2013中的新项目中缺少'Windows Installer XML'
- 5. 使用Windows Installer
- 6. 如何在WiX中设置Windows Package Installer图标而不是默认的图标
- 7. 为什么我应该使用XMLLIst而不是简单的XML?
- 8. 为什么要在语义网上使用RDF而不是XML
- 9. 为什么Windows使用ANSI代码页而不是UNICODE?
- 10. 为什么使用classmethod而不是staticmethod?
- 11. 为什么使用iconv_strpos而不是strpos?
- 12. 为什么使用registerDefaults:而不是setValue:forKey:?
- 13. 为什么使用TagBuilder而不是StringBuilder?
- 14. 为什么,而不是使用回调
- 15. 为什么使用结构,而不是
- 16. 为什么使用StringWriter而不是StringBuffer?
- 17. 为什么使用s:Line而不是mx:HRule?
- 18. 为什么使用ImageIcon而不是Image?
- 19. 为什么使用SQLiteOpenHelper而不是SQLiteDatabase?
- 20. 为什么使用MapFragment而不是SupportMapFragment?
- 21. 为什么使用FloatBuffer而不是float []?
- 22. 为什么使用追加()而不是+
- 23. 为什么使用Number.parseInt而不是parseInt()?
- 24. 为什么使用JLE而不是JL?
- 25. 为什么使用isinstance()而不是type()?
- 26. 为什么使用NoSQL而不是RDBMS?
- 27. 为什么使用uImage而不是zImage
- 28. 为什么使用HTML而不是HAML?
- 29. 为什么使用leal而不是incq?
- 30. 为什么使用TCPDF而不是mpdf
这是Yan +1的一个很好的答案。我写了一个更具叙述性的格式[** Wix工具包的创建历史**](http://stackoverflow.com/questions/6060281/windows-installer-and-the-creation-of-wix/12101548 #12101548)。严的回答更重要。 – 2014-10-30 20:34:28