ExePackage元素具有DetectCondition属性。这意味着您可以指定一个条件,如果条件评估为false,则将安装该包。您可以将其与util:RegistrySearch元素结合使用,该元素可用于搜索注册表以检测.NET Core是否已安装。
为了执行注册表搜索,首先需要找到每当安装.NET时都存在的注册表项。
查找你的注册表中的 “HKLM \ SOFTWARE \微软\的Windows \ CurrentVersion \卸载\”, (或 “HKLM \ SOFTWARE \ WOW6432Node \微软\的Windows \ CurrentVersion \卸载\” 在64位机)键,然后找到对应于.NET Core的子键 - 该键应该具有“DisplayName”的值,该值应该是“.NET Core”或类似的值。
正确的键一旦找到,应该有一个名称,它是一个十六进制字符的字符串 - 这是对应于.NET Core程序的GUID之一。然后,您可以使用下面的代码,使安装程序来搜索该键的存在:
<util:RegistrySearch Id="VCRedistTest32" Root="HKLM" Key="SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{YOUR_GUID_HERE}" Result="exists" Variable="DOTNETPresent" Win64="no"/>
(使用Win64中=“是”,而不是对64位注册表)
然后可以使用对于ExePackage如下:
<ExePackage InstallCommand="/q" Id = "DotNetCore.Setup" SourceFile="..\DotNetCore\DotNetCore.exe" DetectCondition="DOTNETPresent"/>
不要忘记UTIL扩展添加到顶级的WiX元素参考:
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
啊,非常感谢!你是否能够提供条件来确定是否安装了.net内核?我甚至可以避免检测条件,如果我可以强制安装“安装” –
您需要安装后检查注册表。一个完整的例子哟可以在这里检查https://www.firegiant.com/wix/tutorial/net-and-net/bootstrapping/ –