Установите .NET Framework 4.7.2 (при необходимости) с помощью установщика WIX.

Помощь! Я унаследовал проект .NET с проектом установщика WIX. Они делают неявное предположение, что .NET Framework 4.5 установлен на каждой машине, что по большей части верно. Теперь мы добавляем некоторые функции, для которых требуется .NET Framework 4.7.2. Я хотел бы изменить установочный набор, чтобы проверить наличие версии 4.7.2 (или выше) и при необходимости установить через Интернет. Я нашел некоторую документацию, которая частично ответила на мои вопросы, но я все еще не понимаю, как начать работу и как заполнить детали. Доступны ли какие-либо полные демонстрации или инструкции? Насколько я понимаю, мне нужно добавить проект «BootStrapper». Я запутался, если я затем добавляю / ссылаюсь на проект BootStrapper из моей основной установки (моя существующая установка) ИЛИ если я ссылаюсь на основную установку как часть проекта Bootstrapper (через элемент MsiPackage). Кроме того, как мне настроить проверку на 4.7.2? Все ссылки, которые я нашел, относятся к версии 4.5 или более ранней, и, по-видимому, место в реестре для проверки изменилось:

Как определить что. NET Framework и пакеты обновления установлены?

Предполагая, что я ссылаюсь на свою основную установку в Bootstrapper, как мне это сделать?

Это ссылки, которые я нашел для тех, кто заинтересован. Все они намекают на ответы, но не дают полных ответов и / или устарели.

http://wixtoolset.org/documentation/manual/v3/howtos/redistributables_and_install_checks/install_dotnet.html

https://www.firegiant.com/wix/tutorial/net-and-net/bootstrapping/

https://wix.ronifuchs.com/

Наконец, я считаю, что использую WIX Toolset v3.11. Это то, что указывает папка (C: \ Program Files (x86) \ WiX Toolset v3.11)

Я упоминаю об этом, потому что некоторые справочные материалы относятся к Wix 4.0 (пример: http://wixtoolset.org/releases/ "/>)

Спасибо!


person Dave    schedule 05.12.2018    source источник


Ответы (2)


Билет был открыт здесь в прошлом году, и был предоставлен обходной путь:

  <?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">

  <!--
        .NET Framework installation state properties

        Official documentation can be found at the following location:

           .NET Framework 4.5/4.5.1/4.5.2/4.6/4.6.1/4.6.2/4.7/4.7.1 - http://msdn.microsoft.com/en-us/library/w0x726c2(v=vs.110).aspx
    -->

  <?define NetFx471MinRelease = 461308 ?>
  <?define NetFx471WebLink = http://go.microsoft.com/fwlink/?LinkId=852092 ?>
  <?define NetFx471RedistLink = http://go.microsoft.com/fwlink/?LinkId=852104 ?>
  <?define NetFx471EulaLink = http://referencesource.microsoft.com/license.html ?>

  <Fragment>
    <PropertyRef Id="WIXNETFX4RELEASEINSTALLED" />
    <Property Id="WIX_IS_NETFRAMEWORK_471_OR_LATER_INSTALLED" Secure="yes" />
    <SetProperty Id="WIX_IS_NETFRAMEWORK_471_OR_LATER_INSTALLED" Value="1" After="AppSearch">
      WIXNETFX4RELEASEINSTALLED >= "#$(var.NetFx471MinRelease)"
    </SetProperty>
  </Fragment>

  <Fragment>
    <util:RegistrySearchRef Id="NETFRAMEWORK45"/>

    <WixVariable Id="WixMbaPrereqPackageId" Value="NetFx471Web" />
    <WixVariable Id="WixMbaPrereqLicenseUrl" Value="$(var.NetFx471EulaLink)" Overridable="yes" />
    <WixVariable Id="NetFx471WebDetectCondition" Value="NETFRAMEWORK45 &gt;= $(var.NetFx471MinRelease)" Overridable="yes" />
    <WixVariable Id="NetFx471WebInstallCondition" Value="" Overridable="yes" />
    <WixVariable Id="NetFx471WebPackageDirectory" Value="redist\" Overridable="yes" />

    <PackageGroup Id="NetFx471Web">
      <ExePackage
          InstallCommand="/q /norestart /ChainingPackage &quot;[WixBundleName]&quot; /log &quot;[NetFx471FullLog].html&quot;"
          RepairCommand="/q /norestart /repair /ChainingPackage &quot;[WixBundleName]&quot; /log &quot;[NetFx471FullLog].html&quot;"
          UninstallCommand="/uninstall /q /norestart /ChainingPackage &quot;[WixBundleName]&quot; /log &quot;[NetFx471FullLog].html&quot;"
          PerMachine="yes"
          DetectCondition="!(wix.NetFx471WebDetectCondition)"
          InstallCondition="!(wix.NetFx471WebInstallCondition)"
          Id="NetFx471Web"
          Vital="yes"
          Permanent="yes"
          Protocol="netfx4"
          DownloadUrl="$(var.NetFx471WebLink)"
          LogPathVariable="NetFx471FullLog"
          Compressed="no"
          Name="!(wix.NetFx471WebPackageDirectory)NDP471-KB4033344-Web.exe">
        <RemotePayload
          CertificatePublicKey="2ECAEC21B884B40A7C5FB141D2CBC4CDA4930752"
          CertificateThumbprint="49D59D86505D82942A076388693F4FB7B21254EE"
          Description="Microsoft .NET Framework 4.7.1 Setup"
          Hash="C0919415622D86C3D6AB19F0F92EA938788DB847"
          ProductName="Microsoft .NET Framework 4.7.1"
          Size="1434504"
          Version="4.7.2558.0" />
      </ExePackage>
    </PackageGroup>
  </Fragment>

  <Fragment>
    <util:RegistrySearchRef Id="NETFRAMEWORK45"/>

    <WixVariable Id="WixMbaPrereqPackageId" Value="NetFx471Redist" />
    <WixVariable Id="WixMbaPrereqLicenseUrl" Value="$(var.NetFx471EulaLink)" Overridable="yes" />
    <WixVariable Id="NetFx471RedistDetectCondition" Value="NETFRAMEWORK45 &gt;= $(var.NetFx471MinRelease)" Overridable="yes" />
    <WixVariable Id="NetFx471RedistInstallCondition" Value="" Overridable="yes" />
    <WixVariable Id="NetFx471RedistPackageDirectory" Value="redist\" Overridable="yes" />

    <PackageGroup Id="NetFx471Redist">
      <ExePackage
          InstallCommand="/q /norestart /ChainingPackage &quot;[WixBundleName]&quot; /log &quot;[NetFx471FullLog].html&quot;"
          RepairCommand="/q /norestart /repair /ChainingPackage &quot;[WixBundleName]&quot; /log &quot;[NetFx471FullLog].html&quot;"
          UninstallCommand="/uninstall /q /norestart /ChainingPackage &quot;[WixBundleName]&quot; /log &quot;[NetFx471FullLog].html&quot;"
          PerMachine="yes"
          DetectCondition="!(wix.NetFx471RedistDetectCondition)"
          InstallCondition="!(wix.NetFx471RedistInstallCondition)"
          Id="NetFx471Redist"
          Vital="yes"
          Permanent="yes"
          Protocol="netfx4"
          DownloadUrl="$(var.NetFx471RedistLink)"
          LogPathVariable="NetFx471FullLog"
          Compressed="no"
          Name="!(wix.NetFx471RedistPackageDirectory)NDP471-KB4033342-x86-x64-AllOS-ENU.exe">
        <RemotePayload
          CertificatePublicKey="2ECAEC21B884B40A7C5FB141D2CBC4CDA4930752"
          CertificateThumbprint="49D59D86505D82942A076388693F4FB7B21254EE"
          Description="Microsoft .NET Framework 4.7.1 Setup"
          Hash="5F0597CEADDBDF3BAD24CA6EBE142BD81C2DF713"
          ProductName="Microsoft .NET Framework 4.7.1"
          Size="68742112"
          Version="4.7.2558.0" />
      </ExePackage>
    </PackageGroup>
  </Fragment>
</Wix>

а затем в bundle.wxs вам нужно добавить это:

  <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">

  <Bundle Name="..."
          Version="..." 
          Manufacturer="..." 
          UpgradeCode="..." 
          >

    <Chain>      

      <!--Install .Net Framework 4.7.1-->
      <PackageGroupRef Id="NetFx471Redist"/>

      <!--Install Product-->
      <MsiPackage
        Id="Setup"   
        DisplayInternalUI="yes"
        Compressed="yes"
        SourceFile="..."
        Vital="yes">        
      </MsiPackage>     

    </Chain>
  </Bundle>  
</Wix>
person Andrei Petrut    schedule 07.12.2018
comment
Вы можете уточнить? Что такое NetFxExtension. Входит ли ваш главный фрагмент кода в проект загрузчика? Или в основном установочном пакете? Спасибо! - person Dave; 07.12.2018
comment
WixNetfxExtension включает группы пакетов, которые упрощают включение .NET в ваши пакеты. Он также может помочь вам обнаружить наличие различных версий .NET Framework, .NET SDK или Windows SDK. Дополнительную информацию можно найти здесь. проект загрузчика. - person Andrei Petrut; 10.12.2018
comment
Спасибо, Андрей. Ваш ответ и ссылка ответили на мой непосредственный вопрос и были очень полезны. Я все еще застрял на более позднем этапе, но опубликую отдельный вопрос. Спасибо! - person Dave; 12.12.2018
comment
Если у вас будет возможность, посмотрите мой последний вопрос: stackoverflow.com/questions/53744486/ - person Dave; 12.12.2018
comment
Кто-нибудь знает, было ли это сделано для .NET 4.7.2? Я предполагаю, что решение будет аналогичным, но есть некоторые идентификаторы GUID и хеши, о которых я бы не хотел догадываться. - person Tim Long; 29.12.2018
comment
Привет, @TimLong, взгляните на ответ, который я опубликовал отдельно. Все биты, детали, GUID и хэши можно найти на GitHub. Я тестировал свое приложение и работал отлично. - person Jan Zeman; 20.02.2019

Я обнаружил, что вопрос о версии 4.7.2 немного вводит в заблуждение, а принятый ответ - о версии 4.7.1.

Все точные биты находятся здесь.

Просто протестировал на компьютере без установленного 4.7.2, и все работало отлично - установщик загрузил и установил компонент .NET Framework, а затем продолжил установку самой программы.

person Jan Zeman    schedule 19.02.2019
comment
В конце концов, я перенаправил свой код на .NET 4.7.1 и использовал исходный ответ как есть. Но это действительно полезно в будущем, так что +1 и спасибо :) - person Tim Long; 23.02.2019
comment
Будущее наступило, и теперь я использую это в другом проекте, поэтому двойное спасибо. К сожалению, я могу проголосовать за вас только один раз ;-) - person Tim Long; 20.08.2019
comment
Если вам нужно то же самое для версии 4.8, перейдите сюда github.com/wixtoolset/issues/issues/ 5977. Простое копирование и вставка не сработает, не забудьте прокрутить вниз и обновить последние разделы RemotePayload - иначе вы тратите свое время, как я сегодня :) : dotnet.microsoft.com/download/dotnet-framework - person Jan Zeman; 19.01.2020