webentwicklung-frage-antwort-db.com.de

Installieren Sie .NET Framework 4.7.2 (falls erforderlich) mit dem WIX-Installationsprogramm

Hilfe! Ich habe ein .NET-Projekt mit einem WIX-Installationsprogramm geerbt. Sie gehen implizit davon aus, dass .NET Framework 4.5 auf jedem Rechner installiert ist, was meistens zutrifft. Jetzt fügen wir einige Features hinzu, für die .NET Framework 4.7.2 erforderlich ist. Ich möchte den Installationssatz ändern, um zu prüfen, ob 4.7.2 (oder höher) vorhanden ist, und die Installation ggf. über das Web durchzuführen. Ich habe einige Unterlagen gefunden, die meine Fragen teilweise beantworteten, aber ich bin immer noch sehr verwirrt, wie man anfängt und wie man die Einzelheiten ausfüllt. Gibt es vollständige Demos oder Anleitungen? Mein Verständnis ist, dass ich ein "BootStrapper" -Projekt hinzufügen muss. Ich bin verwirrt, wenn ich dann das BootStrapper-Projekt aus meiner Hauptinstallation (meine vorhandene Installation) OR hinzufüge/referenziere, wenn ich auf die Hauptinstallation als Teil des Bootstrapper-Projekts (über das MsiPackage-Element) verweise. Wie stelle ich auch Dinge ein, um nach 4.7.2 zu suchen? Alle Referenzen, die ich gefunden habe, waren für 4.5 oder früher und anscheinend hat sich der Platz in der Registry zur Überprüfung geändert:

Wie erkenne ich, welche .NET Framework-Versionen und Service Packs installiert sind?

Angenommen, ich verweise auf meine Hauptinstallation im Bootstrapper. Wie mache ich das? 

Dies sind die Links, die ich für Interessierte gefunden habe. Sie alle deuten auf die Antworten, geben jedoch keine vollständigen Antworten und/oder sind veraltet. 

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/

Schließlich glaube ich, dass ich WIX Toolset v3.11 verwende. Dies zeigt der Ordner an (C:\Programme (x86)\WiX Toolset v3.11). 

Ich erwähne dies, weil sich einige Referenzmaterialien auf Wix 4.0 beziehen (Beispiel: http://wixtoolset.org/releases/ "/>).

Vielen Dank!

4
Dave

Letztes Jahr wurde ein Ticket here eröffnet, und es wurde eine Problemumgehung bereitgestellt:

  <?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>

und dann in bundle.wxs müssen Sie Folgendes hinzufügen:

  <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>
3
Andrei Petrut

Ich fand es etwas irreführend, dass es sich bei der Frage um 4.7.2 handelt, aber die akzeptierte Antwort zur 4.7.1-Version.

Alle genauen Bits sind hier , scrollen Sie einfach nach unten und finden Sie die Antwort von Mawe9999 vom 3. Mai 2018.

Ich habe es gerade auf einem Computer getestet, auf dem 4.7.2 nicht installiert war, und alles funktionierte einwandfrei. Das Installationsprogramm hat die .NET Framework-Komponente heruntergeladen und installiert. Anschließend wurde die eigentliche Programminstallation fortgesetzt.

1
Jan Zeman