让WiX/Burn检测所需的.NET Framework版本

3

如何让 Burn 检测到所需的 .NET 4.5 框架是否已安装,如果未安装,则在启动我的自定义 UI 之前通知用户需要安装 .NET 4.5 才能运行?

如果没有先决条件检查,我的自定义 UI(BootStrapperApplication)将无法加载。

我不想安装,只想提示缺失。

2个回答

7

目前被接受的答案实际上并不起作用,因为MSI属性在捆绑包中不可用。

此示例检查.NET Framework 4.6.1。在Wix标记中添加对NetFxExtension和UtilExtension的引用:

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:bal="http://schemas.microsoft.com/wix/BalExtension" 
 xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">

定义一些属性,指示您需要的.NET版本(我通过搜索此存储库找到了发布版本):

<?define NetFx461MinRelease = 394254 ?>
<?define NetFx461WebLink = http://go.microsoft.com/fwlink/?LinkId=671728 ?>

最后,在您的捆绑包中引用NetFx扩展中的注册表检查,然后手动执行检查。
<util:RegistrySearchRef Id="NETFRAMEWORK45"/>

<bal:Condition Message="This product requires .NET Framework 4.6.1, please install it from &lt;a href=&quot;$(var.NetFx461WebLink)&quot;&gt;$(var.NetFx461WebLink)&lt;/a&gt;.">
  <![CDATA[NETFRAMEWORK45 >= $(var.NetFx461MinRelease)]]>
</bal:Condition>

这会导致“错误LGHT0094:对符号'WixSearch:NETFRAMEWORK45'的未解决引用”。违规出现在registrysearchref行。 - Jon
@Jon,你在你的WiX项目中引用了WixNetFxExtension.dll吗? - Peter Chillemi
这个答案有效,而被接受的那个则没有。 - Mike

2
在您的Bundle.wxs文件(或者您定义了<Bundle>的任何地方),添加以下内容:
<bal:Condition Message="Add your message here">NETFRAMEWORK40FULL</bal:Condition>

例如,我使用以下信息提供可点击的链接,用户可以使用该链接下载所需的安装程序:
<?define NetFx40WebLink = http://go.microsoft.com/fwlink/?linkid=182805 ?>
<bal:Condition Message="Microsoft .NET 4 Full Framework is required. Please download and install it from &lt;a href=&quot;$(var.NetFx40WebLink)&quot;&gt;$(var.NetFx40WebLink)&lt;/a&gt; then re-run this installer.">NETFRAMEWORK40FULL</bal:Condition>

结果看起来像这样:

需要下载的截图


你有关于如何定义此对话框的主标题的线索吗?例如,“需要Microsoft .NET Framework来进行xxx设置”? - LordWilmore
据我所知,您无法更改主标题(除非您自己编辑WiX源代码)。 - John M. Wright
1
NETFRAMEWORK40FULL 是一个 MSI 变量,所以你肯定不能在 Bundle 中使用它吧?我刚刚试了一下来确保,无论 .NET 是否已安装,安装程序总是失败的,可能是因为 NETFRAMEWORK40FULL 变量总是错误的。 - Cocowalla
你知道如何强制将语言始终设置为英语(独立于用户的区域设置)吗?如果区域设置为德语,则上方文本“Microsoft .NET Frame...”将显示为德语。 - Christian St.
我不确定,但您可以尝试强制将安装程序的语言设置为英语,看看是否会传递到 .net 安装程序。请参阅 https://dev59.com/rWjWa4cB1Zd3GeqPqWgD#12407004。 - John M. Wright

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