Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wix 如何为Windows Installer创建必备软件包?_Wix_Windows Installer_Prerequisites - Fatal编程技术网

Wix 如何为Windows Installer创建必备软件包?

Wix 如何为Windows Installer创建必备软件包?,wix,windows-installer,prerequisites,Wix,Windows Installer,Prerequisites,有谁能给我介绍一下如何创建可以在WiX中使用的必备软件包?这些与“引导程序包”相同吗 这将适用于构建在.NET Framework 4.7.1上的C#Windows桌面应用程序(实际上是an)。单独的MSI:我更喜欢通过单独的MSI部署先决条件,然后将其捆绑在Burn bundlesetup.exe或来自或(套件项目)的等效结构中。我喜欢这一点,因为我可以在不接触主MSI的情况下更新前提条件 :Windows Installer中用于部署多个应用程序共享的先决条件或组件的内置机制是合并模块。片段

有谁能给我介绍一下如何创建可以在WiX中使用的必备软件包?这些与“引导程序包”相同吗

这将适用于构建在.NET Framework 4.7.1上的C#Windows桌面应用程序(实际上是an)。

单独的MSI:我更喜欢通过单独的MSI部署先决条件,然后将其捆绑在Burn bundle
setup.exe
或来自或(套件项目)的等效结构中。我喜欢这一点,因为我可以在不接触主MSI的情况下更新前提条件

:Windows Installer中用于部署多个应用程序共享的先决条件或组件的内置机制是合并模块。片段数据库在编译时合并到主MSI数据库中(某种静态链接)。使用这些模块可以正确计算所有文件引用,从而可以确定是否可以在卸载时卸载该文件,或者是否有其他应用程序仍在使用运行时/必备组件。请注意:对于MSI,卸载必备MSI会使依赖它的所有应用程序立即失败。我觉得这没问题,尤其是对于企业部署,您可能希望这样做(例如轻松降级到以前的必备版本)


WiX包含文件:有一种WiX替代方案可用于合并模块。这里有两个答案,它们基本上像C++一样包含许多源文件:

基本构造


我会用


个人观点:我不喜欢合并模块,因为它们被合并到了这么多的包中,突然你不得不重新构建它们以更新新的合并模块?不好的内聚和耦合?(这里没有共识)。请注意,由于Windows Installer的设计,只需安装一个具有更新的先决条件的软件包,即可为使用合并模块安装的所有应用程序更新系统。为什么?因为新包(如果合并模块编写正确)应该升级所有共享文件。对于没有安装许多使用相同合并模块的其他应用程序的系统,您仍然需要更新所有安装程序以获得新的合并模块版本。那么你就这么远了


COM:每个人最喜欢的传统技术:COM。对于进程外COM文件(EXE文件),我假设您需要注册
AppId
以及
类guid
程序ID
。为类和progid使用适当的表,我认为应该尝试使用AppId表。有些设置需要进入注册表表

商业工具为COM提供了很多自动魔法,但不幸的是WiX有一些挑战。这里有一个关于COM注册表数据提取的混乱片段:。我想这需要一些时间

WiX工具包中的工具heat.exe可以提取dll文件的COM信息,但不能从exe文件或64位组件中提取


链接

单独的MSI:我更喜欢通过单独的MSI部署先决条件,然后将其捆绑在Burn bundle
setup.exe
或来自或(套件项目)的等效构造中。我喜欢这一点,因为我可以在不接触主MSI的情况下更新前提条件

:Windows Installer中用于部署多个应用程序共享的先决条件或组件的内置机制是合并模块。片段数据库在编译时合并到主MSI数据库中(某种静态链接)。使用这些模块可以正确计算所有文件引用,从而可以确定是否可以在卸载时卸载该文件,或者是否有其他应用程序仍在使用运行时/必备组件。请注意:对于MSI,卸载必备MSI会使依赖它的所有应用程序立即失败。我觉得这没问题,尤其是对于企业部署,您可能希望这样做(例如轻松降级到以前的必备版本)


WiX包含文件:有一种WiX替代方案可用于合并模块。这里有两个答案,它们基本上像C++一样包含许多源文件:

基本构造


我会用


个人观点:我不喜欢合并模块,因为它们被合并到了这么多的包中,突然你不得不重新构建它们以更新新的合并模块?不好的内聚和耦合?(这里没有共识)。请注意,由于Windows Installer的设计,只需安装一个具有更新的先决条件的软件包,即可为使用合并模块安装的所有应用程序更新系统。为什么?因为新包(如果合并模块编写正确)应该升级所有共享文件。对于没有安装许多使用相同合并模块的其他应用程序的系统,您仍然需要更新所有安装程序以获得新的合并模块版本。那么你就这么远了


COM:每个人最喜欢的传统技术:COM。对于进程外COM文件(EXE文件),我假设您需要注册
AppId
以及
类guid
程序ID
。为类和progid使用适当的表,我认为应该尝试使用AppId表。有些设置需要进入注册表表

商业工具为COM提供了很多自动魔法,但WiX无法实现