2015-01-28 2 views
1

Я пытаюсь определить, установлена ​​ли инфраструктура .NET на компьютере клиента до установки моего приложения. Если это не я включаю файл установки для его выполнения.Wix bootstrapper проблема обнаружения .net framework

У меня есть следующий код в моем chain:

<ExePackage Id="Net45" Name="Microsoft .NET Framework 4.5.1 Setup" Cache="no" Compressed="yes" PerMachine="yes" Permanent="yes" Vital="yes" 
    SourceFile="F:\Net Framework Install.exe" 
    InstallCondition="NOT(Installed OR NETFRAMEWORK45)" /> 

И я также объявить следующий фрагмент:

<Fragment Id="InstallConditionChecks"> 
    <PropertyRef Id="NETFRAMEWORK45"/> 
    </Fragment> 

Наконец, я считаю, я ссылку на все правильные библиотеки WIX, необходимых для обнаружение установки .net:

<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" 
    xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension"> 

Проблема заключается в том, У меня есть тестовая машина, у которой определенно установлен .NET Framework 4.5, установщик все еще пытается ее установить (что приводит к установке установщика .net, пытающейся восстановить установку).

Я делаю что-то неправильно здесь?

ответ

0

Вы не проверяете реестр целевой машины для целевой структуры, которую вы ищете, посмотрите на это руководство, оно покажет вам, как обнаружить Net Framework (RegistrySearch), и даже показывает, как это сделать работайте с Win32 или Win64.

Учебник here

2

Там две проблемы здесь. Основная проблема заключается в том, что PropertyRef предназначен для MSI, а не для пакетов. Вам необходимо использовать RegistrySearchRef. Другая проблема заключается в том, что вы устанавливаете логику обнаружения в InstallCondition, но это относится к DetectCondition. Удалите InstallCondition и использовать тот же DetectCondition, что расширение NetFx использует: https://github.com/wixtoolset/wix3/blob/develop/src/ext/NetFxExtension/wixlib/NetFx451.wxs

<?define NetFx451MinRelease = 378675 ?> 
<util:RegistrySearchRef Id="NETFRAMEWORK45" /> 
<ExePackage DetectCondition="NETFRAMEWORK45 &gt;= $(var.NetFx451MinRelease)" /> 
Смежные вопросы