最佳实践:使用Wix和Bundle处理不同操作系统上的prerequesitews

最佳实践:使用Wix和Bundle处理不同操作系统上的prerequesitews,wix,windows-installer,installation,bundle,Wix,Windows Installer,Installation,Bundle,这更像是一个最佳实践问题。 在过去的几个月里,我们的设置遇到了几个问题。我们有一个标准的msi设置捆绑在一个使用Wix 3.10的引导程序设置中。基本上,我们使用捆绑包只是为了能够为设置创建智能用户wpf界面,但随着时间的推移,需求不断增长,因此我们在捆绑包中添加了prerequesites 也依赖于操作系统的级联.Net依赖项 我们已将项目更新为.Net 4.6,因此我们在设置中添加了此框架,条件如下: <PackageGroup Id="Netfx4FullInternal">

这更像是一个最佳实践问题。 在过去的几个月里,我们的设置遇到了几个问题。我们有一个标准的msi设置捆绑在一个使用Wix 3.10的引导程序设置中。基本上,我们使用捆绑包只是为了能够为设置创建智能用户wpf界面,但随着时间的推移,需求不断增长,因此我们在捆绑包中添加了prerequesites

  • 也依赖于操作系统的级联.Net依赖项
  • 我们已将项目更新为.Net 4.6,因此我们在设置中添加了此框架,条件如下:

    <PackageGroup Id="Netfx4FullInternal">
        <ExePackage Id="Netfx4FullInternal" Cache="no" Compressed="yes" PerMachine="yes" Permanent="yes" Vital="yes"
            DisplayName="Microsoft .NET Framework 4.6"
            DetectCondition="(Netfx4FullVersion >= &quot;393295&quot;) AND (NOT VersionNT64 OR (Netfx4x64FullVersion>=&quot;393295&quot;))" 
            InstallCommand="/passive /norestart" 
            SourceFile="..\..\..\..\Common\PayloadBundle\NDP46-KB3045557-x86-x64-AllOS-ENU.exe">
        </ExePackage>
    </PackageGroup>
    
    如果之前未安装其他KB,则无法在此系统上安装此KB 2919355。由于我们不得不接受存在多个系统的星座和配置,因此我们决定不在设置中添加所有这些PreReq–另一个原因是如果我们添加了,设置的预期增长。 当用户的系统是最新的时,大多数问题都可以解决,这就是我们在自述文件中所写的,但是我们应该如何处理这些问题呢

  • 每个系统和位宽度的修补程序 另一个大问题是自从.NET4.6以来,处理文化信息的方式发生了变化。不幸的是,我们的用户界面是从4.6开始的纯语言混合,似乎每个程序集都以一种特定的语言开始,我们的语言切换模式只会更改主执行程序集的语言。不管这是谁的错,但微软发布了一个4.6修补程序来解决这个问题。但也有针对Win7(单文件)、Windows 8(每32位和64位)、Windows 8.1(每32位和64位)等的修补程序。由于大小原因,我们不想将所有这些文件添加到设置中,但我们也不想在设置中过于具体。例如,Microsoft将Windows 10的版本从6.4.0.0更改为10.0.0.0,这破坏了我们的设置,因此我们不希望检查到细粒度,而是希望准确地通知用户他应该做什么以及缺少什么。 你如何解决这个问题?我们应该走什么路

  • 我会因为.net日志中提到的错误而失败。您不应该负责处理在每种操作系统/风格的Windows上安装KB修复程序所需的所有条件。正如您所发现的,每个KB都有一些必要条件,每个操作系统可以有几个KB的先决条件来安装特定的KB。这就是Windows Update存在的原因。如果最终用户没有外部互联网接入,他们需要让其IT部门为speicifc操作系统安装KB修复程序,以完成安装。我完全同意您的意见。现在我只向用户显示一个返回码和一条常见的故障消息,因为我不知道如何获取有关错误的详细信息。是否有可能从net.log文件中获取条目(请不要执行文件系统操作)?在ApplyComplete事件中,我得到安装出错的信息,但没有真正的错误消息。您能告诉我应该使用哪个事件来获取常见错误以及详细错误信息吗?是的,.net安装程序返回代码没有太大帮助,因为您实际上得到的是setup.exe的返回代码,它基本上只是提取.net包并从中运行正确的OS安装程序在那个包裹里。此setup.exe可以返回与.net安装程序完全不同的返回代码。您可能需要打开并阅读.net安装日志才能获得真正的错误代码。谢谢您的帮助。当网络出现故障时,我会显示一条消息,并显示一个链接,将客户指向microsoft。其他一切由用户决定。-)如果出现.net日志中提到的错误,我将失败。您不应该负责处理在每种操作系统/风格的Windows上安装KB修复程序所需的所有条件。正如您所发现的,每个KB都有一些必要条件,每个操作系统可以有几个KB的先决条件来安装特定的KB。这就是Windows Update存在的原因。如果最终用户没有外部互联网接入,他们需要让其IT部门为speicifc操作系统安装KB修复程序,以完成安装。我完全同意您的意见。现在我只向用户显示一个返回码和一条常见的故障消息,因为我不知道如何获取有关错误的详细信息。是否有可能从net.log文件中获取条目(请不要执行文件系统操作)?在ApplyComplete事件中,我得到安装出错的信息,但没有真正的错误消息。您能告诉我应该使用哪个事件来获取常见错误以及详细错误信息吗?是的,.net安装程序返回代码没有太大帮助,因为您实际上得到的是setup.exe的返回代码,它基本上只是提取.net包并从中运行正确的OS安装程序在那个包裹里。此setup.exe可以返回与.net安装程序完全不同的返回代码。您可能需要打开并阅读.net安装日志才能获得真正的错误代码。谢谢您的帮助。当网络出现故障时,我会显示一条消息,并显示一个链接,将客户指向microsoft。其他一切由用户决定。-)
    1.Das Update zu KB2919355 muss installiert werden, bevor Sie dieses Produkt unter Windows 8.1 oder Windows Server 2012 R2 installieren.