Frage

Ich schaffe einen Installer für eine ASP.Net Website mit WiX. Wie stellen Sie die ASP.Net-Version in IIS WiX verwenden?

War es hilfreich?

Lösung

Wir verwenden diese:

Sie zuerst das Verzeichnis NET Framework root bestimmen, aus der Registrierung:

<Property Id="FRAMEWORKROOT">
  <RegistrySearch Id="FrameworkRootDir" Root="HKLM"
                Key="SOFTWARE\Microsoft\.NETFramework" 
                Type="directory" Name="InstallRoot" />
</Property>

Dann innerhalb der Komponente, die Ihre Website in IIS installiert:

<!-- Create and configure the virtual directory and application. -->
<Component Id='WebVirtualDirComponent' Guid='{GUID}' Permanent='no'>
  <iis:WebVirtualDir Id='WebVirtualDir' Alias='YourAlias' Directory='InstallDir' WebSite='DefaultWebSite'  DirProperties='DirProperties'>
    <iis:WebApplication Id='WebApplication' Name='YourAppName' WebAppPool='AppPool'>
      <!-- Required to run the application under the .net 2.0 framework -->
      <iis:WebApplicationExtension Extension="config" CheckPath="yes" Script="yes"
                    Executable="[FRAMEWORKROOT]v2.0.50727\aspnet_isapi.dll" Verbs="GET,HEAD,POST" />
      <iis:WebApplicationExtension Extension="resx" CheckPath="yes" Script="yes"
                    Executable="[FRAMEWORKROOT]v2.0.50727\aspnet_isapi.dll" Verbs="GET,HEAD,POST" />
      <iis:WebApplicationExtension Extension="svc" CheckPath="no" Script="yes"
                    Executable="[FRAMEWORKROOT]v2.0.50727\aspnet_isapi.dll" Verbs="GET,HEAD,POST" />
    </iis:WebApplication>
  </iis:WebVirtualDir>
</Component>

Für ein x64-Installationsprogramm ( DIES IST WICHTIG ) In Win64 = ‚yes‘ in der Registrierung suchen, weil die 32-Bit-Umgebung auf einer 64-Bit-Maschine eine andere Registrierungsstruktur hat (und eine andere frameworkroot)

<RegistrySearch Id="FrameworkRootDir" Root="HKLM"
        Key="SOFTWARE\Microsoft\.NETFramework" 
        Type="directory" 
        Name="InstallRoot" Win64='yes' />

Andere Tipps

Hier ist, was für mich gearbeitet, nachdem er mit ihm rang:

  <Property Id="FRAMEWORKBASEPATH">
     <RegistrySearch Id="FindFrameworkDir" Root="HKLM" Key="SOFTWARE\Microsoft\.NETFramework" Name="InstallRoot" Type="raw"/>
  </Property>
  <Property Id="ASPNETREGIIS" >
     <DirectorySearch Path="[FRAMEWORKBASEPATH]" Depth="4" Id="FindAspNetRegIis">
        <FileSearch Name="aspnet_regiis.exe" MinVersion="2.0.5"/>
     </DirectorySearch>
  </Property>

  <CustomAction Id="MakeWepApp20" Directory="TARGETDIR" ExeCommand="[ASPNETREGIIS] -norestart -s W3SVC/[WEBSITEID]/ROOT/[VIRTUALDIR]" Return="check"/>

  <InstallExecuteSequence>
     <Custom Action="MakeWepApp20" After="InstallFinalize">ASPNETREGIIS AND NOT Installed</Custom>
  </InstallExecuteSequence>

[WebsiteID] und [VirtualDir] sind Eigenschaften, die Sie selbst definieren müssen. [VirtualDir] ist nur dann erforderlich, wenn Sie die ASP.NET-Version für eine Anwendung eher als eine ganze Webseite setzen.

Die Sequenzierung der benutzerdefinierten Aktion ist von entscheidenden Bedeutung. Ausführen es vor InstallFinalize verursacht es zum Scheitern verurteilt, da die Web-Anwendung, bis danach nicht mehr verfügbar ist.

Dank Chris Burrows für ein richtiges Beispiel für das Finden der aspnet_regiis ausführbare Datei (Google "WIX Mit Hilfe eine Connection String sichern").

jb

Vergessen Sie nicht, ASP 2.0 auf dem Server zu aktivieren

<iis:WebServiceExtension Id="ExtensionASP2" Group="ASP.NET v2.0.50727" Allow="yes" File="[NETFRAMEWORK20INSTALLROOTDIR]aspnet_isapi.dll" Description="ASP.NET v2.0.50727"/>

Hier ist die sof-Frage

Meine Antwort ist im Grunde die gleiche wie andere hier zu sehen; Ich wollte nur die Menschen ein anderes Beispiel bieten.

die Anzahl der Dateierweiterungen gegeben, dass ASP.NET behandelt, und dass die Liste Änderungen in jeder Version, ich denke, die zuverlässigste Lösung aspnet_regiis am Ende der Installation ausgeführt werden soll. Dies bedeutet aber, dass ich habe keine Unterstützung für Rollback oder Deinstallation. Ich Sie eine neue Anwendung in IIS erstellen, ist es nicht wirklich wichtig, weil es von Wix gelöscht werden. Wenn Sie eine bestehende Anwendung sind zu modifizieren, vielleicht könnten Sie aus der Registrierung finden Sie heraus, welche Version von ASP.NET konfiguriert ist, und dass die Version des aspnet_regiis ausführen, um die Änderungen rückgängig zu machen.

Im Folgenden verwendet Wix 3.5.

<Fragment>
    <!-- Use the properties in Wix instead of doing your own registry search. -->
    <PropertyRef Id="IISMAJORVERSION"/>
    <PropertyRef Id="NETFRAMEWORK40FULL"/>
    <PropertyRef Id="NETFRAMEWORK40FULLINSTALLROOTDIR"/>

    <!-- The code I'm using is intended for IIS6 and above, and it needs .NET 4 to be
    installed. -->
    <Condition Message="This application requires the .NET Framework 4.0. Please install the required version of the .NET Framework, then run this installer again.">
        <![CDATA[Installed OR (NETFRAMEWORK40FULL)]]>
    </Condition>
    <Condition Message="This application requires Windows Server 2003 and Internet Information Services 6.0 or better.">
        <![CDATA[Installed OR (VersionNT >= 502)]]>
    </Condition>

    <!-- Populates the command line for CAQuietExec. IISWEBSITEID and IISVDIRNAME 
    could be set to default values, passed in by the user, or set in your installer's 
    UI. -->
    <CustomAction Id="ConfigureIis60AspNetCommand" Property="ConfigureIis60AspNet"
                  Execute="immediate"
                  Value="&quot;[NETFRAMEWORK40FULLINSTALLROOTDIR]aspnet_regiis.exe&quot; -norestart -s &quot;W3SVC/[IISWEBSITEID]/ROOT/[IISVDIRNAME]&quot;" />
    <CustomAction Id="ConfigureIis60AspNet" BinaryKey="WixCA" DllEntry="CAQuietExec" 
                  Execute="deferred" Return="check" Impersonate="no"/>
    <InstallExecuteSequence>
        <Custom Action="ConfigureIis60AspNetCommand" After="CostFinalize"/>

        <!-- Runs the aspnet_regiis command immediately after Wix configures IIS. 
        The condition shown here assumes you have a selectable feature in your 
        installer with the ID "WebAppFeature" that contains your web components. The 
        command will not be run if that feature is not being installed, or if IIS is 
        not version 6. It *will* run if the application is being repaired. 

        SKIPCONFIGUREIIS is a property defined by Wix that causes it to skip the IIS
        configuration. -->
        <Custom Action="ConfigureIis60AspNet" After="ConfigureIIs" Overridable="yes">
            <![CDATA[((&WebAppFeature = 3) OR (REINSTALL AND (!WebAppFeature = 3))) 
            AND (NOT SKIPCONFIGUREIIS) AND (IISMAJORVERSION = "#6")]]>
        </Custom>
    </InstallExecuteSequence>
    <UI>
        <ProgressText Action="ConfigureIis60AspNetCommand"
            >Configuring ASP.NET</ProgressText>
        <ProgressText Action="ConfigureIis60AspNet"
            >Configuring ASP.NET</ProgressText>
    </UI>

</Fragment>

Das ist ein bisschen einfacher. Ich weiß nicht, ob dies auf die Aktualisierung eines bestehenden AppPool funktioniert, funktioniert aber eine APP Pool zum Erstellen und Einstellen der .NET-Version.

<iis:WebServiceExtension Id="AMS_AppPool" Name="AccountManagementSVC1" Identity="other"  ManagedPipelineMode="integrated" ManagedRuntimeVersion="v4.0" User="AMS_AppPoolUser" RecycleMinutes="120" />

fand ich eine andere Art und Weise durch die WiX WebApplicationExtension verwenden. Sie können die vollständige Lösung überprüfen hier und hier .

Ich mag Wix so weit, aber der Mensch hat dauert es viel zu graben zu finden, was Sie suchen.

  • Zuerst die richtigen .NET-Version Ordner. Verwenden Sie Directory / Filesearch zu Suche durchführen.

  • Mit dem oben angegebenen Pfad aspnet_regiis.exe und stellen Sie die Version für die Webapp von einer benutzerdefinierten Aktion nennen.

    aspnet_regiis.exe -s W3SVC/1/ROOT/SampleApp1

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top