Элемент ExePackage имеет свойство DetectCondition. Это означает, что вы можете указать условие, при котором, если условие оценивается как ложное, пакет будет установлен. Вы можете комбинировать это с элементом util: RegistrySearch, который может использоваться для поиска в реестре, чтобы определить, установлено ли уже .NET Core.
Чтобы выполнить поиск в реестре, вам сначала нужно найти ключ реестра, который присутствует при установке .NET.
Найдите в реестре раздел «HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall \» (или «HKLM \ SOFTWARE \ WOW6432Node \ Microsoft \ Windows \ CurrentVersion \ Uninstall \» на 64-разрядных машинах), затем найдите подраздел что соответствует .NET Core - этот ключ должен иметь значение для «DisplayName», которое должно быть «.NET Core» или что-то подобное.
Найденный правильный ключ должен иметь имя, которое представляет собой строку шестнадцатеричных символов - это один из идентификаторов GUID, соответствующих программе .NET Core. Затем вы можете использовать следующий код, чтобы программа установки могла найти этот ключ:
<util:RegistrySearch Id="VCRedistTest32" Root="HKLM" Key="SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{YOUR_GUID_HERE}" Result="exists" Variable="DOTNETPresent" Win64="no"/>
(Для 64-разрядного реестра используйте Win64 = "yes")
Затем вы можете использовать для 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">
person
Calum MacLeod
schedule
24.07.2017