我正在尝试添加 .Net 4.7 作为安装过程的一部分。但是,对于 Windows 10,.Net 4.7 仅支持周年更新或更高版本。
不幸的是,在 Burn 中,没有可以用来检查 Windows Build 的内置属性。
有什么方法可以指定安装程序仅在周年更新或更晚时继续进行吗?
您可以使用 bal:Condition 元素来阻止基于条件的捆绑包安装。您可以将其与 util:RegistrySearch 元素结合起来搜索存储当前 Windows 版本的注册表项:
<util:RegistrySearch Id="CurrentBuild" Variable="CBNumber" Result="value" Root="HKLM" Key="SOFTWARE\Microsoft\Windows NT\CurrentVersion" Value="CurrentBuildNumber"/>
<bal:Condition Message="Windows 10 Anniversary update or later is required.">
CBNumber > 14390
</bal:Condition>
在这里,任何晚于周年版的 Windows 10 版本(其版本号为 14393)的 CBNumber 属性将允许安装继续进行,但任何早期版本都将被阻止。您还需要在源文件顶部添加对 WiX bal 和 util 扩展的引用:
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:bal="http://schemas.microsoft.com/wix/BalExtension"
xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
Win10 版本检查可以通过将
<Condition..>
耦合到 wxs 文件中 <RegistrySearch..>
标记内的 <Product..>
属性来实现。 Win10 版本 1809 检查示例:
<Property Id="WINDOWSBUILDNUMBER" Secure="yes">
<RegistrySearch Id="BuildNumberSearch" Root="HKLM" Key="SOFTWARE\Microsoft\Windows NT\CurrentVersion" Name="CurrentBuildNumber" Type="raw" />
</Property>
<Condition Message="This application require Windows 10 version 1809 (build 17763) or newer.">
<![CDATA[Installed OR (WINDOWSBUILDNUMBER >= 17763)]]>
</Condition>
相关资源:
根据https://github.com/wixtoolset/issues/issues/6026Wix 中没有内置支持来简化 Win10 版本检查。
<Product>
<Condition Message="Windows 10 Anniversary update or later is required.">
WindowsBuild < 14390
</Condition>
</Product>
这适用于 WiX 4:
<Property Id="WINDOWSBUILDNUMBER" Secure="yes">
<RegistrySearch
Id="BuildNumberSearch"
Root="HKLM"
Key="SOFTWARE\Microsoft\Windows NT\CurrentVersion"
Name="CurrentBuildNumber"
Type="raw" />
</Property>
<Launch
Message="This application require Windows 10 version 1809 (build 17763) or newer."
Condition="WINDOWSBUILDNUMBER >= 17763" />