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/ –