Как установить.NET 4.5 с пакетом WiX?

Мне нужно включить Microsoft .NET 4.5 в качестве предварительного условия в мой комплект установки, и я хочу, чтобы он был как можно более автоматическим. Тем не менее, .NET не должны быть удалены при удалении. Я думаю, что я прочитал почти все о том, как использовать DetectCondition и / или InstallCondition, но я все еще не понимаю это правильно; он либо всегда запускает установку.NET, либо никогда не запускает ее.

Вот моя последняя установка:

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

  <!-- Define minimum .NET Framework version -->
  <?define NetFx45MinRelease = 377811?>
  ...
    <Chain>
      <PackageGroupRef Id="Netfx45FullPackage"/>
      ...
    </Chain>

    <PackageGroup Id="Netfx45FullPackage">
      <ExePackage Id="Netfx45Full" Cache="no" Compressed="yes" PerMachine="yes" Permanent="yes" Vital="yes"
                  SourceFile="..\..\..\..\Environment\InstallerResources\Prerequisites\dotnetfx45_full_x86_x64.exe"
                  InstallCommand="/passive /norestart"
                  DetectCondition="NETFRAMEWORK45 &gt;= $(var.NetFx45MinRelease)"
                  InstallCondition="NOT REMOVE AND (NETFRAMEWORK45 &lt; $(var.NetFx45MinRelease))" />
    </PackageGroup>

(По какой-то причине мне пришлось определить NetFx45MinRelease сам, хотя он должен был быть включен в WixNetFxExtension.)

Как я могу получить правильные настройки?

2 ответа

Решение

Я не совсем уверен, почему у вас проблемы, но у меня просто была та же задача, и она (сейчас;-) работает как задумано. Таким образом, он устанавливает .NET 4.5 только в случае необходимости и не удаляет.NET при удалении загрузчика в целом.

Тем не менее, .NET 4.5 может быть удален по отдельности, что я считаю хорошим.

Это то, что я использовал (наиболее вероятно, получено из других сообщений переполнения стека):

<PackageGroup Id="Netfx45Xxx">
    <ExePackage Id="Netfx45Xxx" Cache="no" Compressed="no" PerMachine="yes" Permanent="yes" Vital="yes" InstallCommand="/q"
        SourceFile="C:\wixtest\dotnetfx45_full_x86_x64.exe"
        DetectCondition="(Netfx4FullVersion=&quot;4.5.50709&quot;) AND (NOT VersionNT64 OR (Netfx4x64FullVersion=&quot;4.5.50709&quot;))"
        InstallCondition="(VersionNT >= v6.0 OR VersionNT64 >= v6.0) AND (NOT (Netfx4FullVersion=&quot;4.5.50709&quot; OR Netfx4x64FullVersion=&quot;4.5.50709&quot;))"/>
</PackageGroup>

Странно то, что у вас уже есть Permanent="yes", что действительно является ключом к сохранению.NET при удалении.

Одно из отличий состоит в том, что у меня нет явного "НЕ УДАЛЕНО" в InstallCondition, может, это скорее сбивает с толку, чем полезно для установщика Windows...?

Я использую WiX 3.7.1224.0, которая в настоящее время является последней.


Один комментарий к ответу TheESJ: даже с предопределенным PackageGroupRef вы можете предоставить локальный файл, чтобы избежать загрузки. Просто поместите его в папку "redist" под файлом EXE загрузчика, и он будет взят оттуда, если он есть, без загрузки. Я обнаружил такое поведение вчера через файл журнала после неправильной установки.

Вам не нужно определять PackageGroup. Это содержится в WixNetFxExtension. См. http://wix.sourceforge.net/manual-wix3/install_dotnet.htm. Все, что вам нужно сделать, это включить ссылку на WixNetFxExtension в ваш wixproj, а затем добавить PackageGroupRef в одну из групп PackageGroup, описанную здесь: http://wix.sourceforge.net/manual-wix3/wixnetfxextension.htm в вашу цепочку.

Другие вопросы по тегам