Как установить .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.)

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


person Torbjörn Bergstedt    schedule 22.11.2012    source источник
comment
?define директива для каждого файла. Поэтому вы должны включать его в каждый файл, который его использует. Вот почему вы были вынуждены повторно объявить его.   -  person Sasha    schedule 26.11.2012
comment
Хорошо, спасибо за это разъяснение.   -  person Torbjörn Bergstedt    schedule 26.11.2012


Ответы (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-файлом загрузчика, и он будет взят оттуда, если он есть, без загрузки. Я обнаружил это поведение вчера через файл журнала после ошибочной установки.

person ChristianH    schedule 15.01.2013
comment
Спасибо! На самом деле я использую аналогичную (теперь работающую :) настройку, думаю, я настрою свой InstallCondition, чтобы использовать вашу настройку. - person Torbjörn Bergstedt; 16.01.2013
comment
каков контекст ‹PackageGroup›? В каком файле он находится? Содержится ли он в теге ‹Bundle› или в чем-то еще? Документация WiX для этого материала плохая, и этот ответ не рисует всей картины. - person Stealth Rabbi; 03.05.2013
comment
Было бы неплохо увидеть весь пример того, как это работает вместе. - person C Johnson; 20.12.2016

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

person TheESJ    schedule 26.11.2012
comment
Я знаю об этом варианте, причина, по которой мы делаем это, заключается в том, чтобы иметь полный контроль над тем, что установлено, и разрешить установку на машинах без доступа в Интернет. - person Torbjörn Bergstedt; 29.11.2012
comment
Всегда лучше показать, как, чем говорить, что делать.... Некоторые из нас очень плохо знакомы с Wix (например, имеют всего несколько часов опыта). - person C Johnson; 20.12.2016
comment
Также пакет fx не работает с загрузчиками записи, отлично подходит для msi, но не для exe. - person Paul Swetz; 14.05.2019
comment
старый вопрос, но любопытный, потому что я пытаюсь установить зависимости .net как можно проще. Итак, вы говорите, что ‹PackageGroupRef Id=NetFx461Web /› не работает с загрузчиком? @PaulSwetz - person Todilo; 28.11.2019