Question

Je crée un programme d'installation pour un site Web ASP.Net à l'aide de WiX. Comment définir la version ASP.Net dans IIS avec WiX?

Était-ce utile?

La solution

Nous utilisons ceci:

Déterminez d'abord le répertoire racine du framework .Net à partir du registre:

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

Ensuite, à l'intérieur du composant qui installe votre site Web dans IIS:

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

Pour un programme d'installation x64 ( CECI EST IMPORTANT ) Ajoutez Win64 = 'oui' à la recherche dans le registre, car l'environnement 32 bits sur un ordinateur 64 bits possède une ruche de registre différente (et un framework différent)

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

Autres conseils

Voici ce qui a fonctionné pour moi après avoir lutté avec elle:

  <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] et [VIRTUALDIR] sont des propriétés que vous devez définir vous-même. [VIRTUALDIR] n’est nécessaire que si vous définissez la version ASP.NET pour une application plutôt que pour un site Web entier.

La séquence de l'action personnalisée est essentielle. L’exécuter avant InstallFinalize entraînera l’échec, car l’application Web n’est disponible qu’après cela.

Merci à Chris Burrows pour son exemple approprié de recherche du fichier exécutable aspnet_regiis (Google "Utilisation de WIX pour sécuriser une chaîne de connexion").

jb

N'oubliez pas d'activer ASP 2.0 sur le serveur

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

Voici la question délicate

Ma réponse est fondamentalement la même que d’autres vues ici; Je voulais juste offrir aux gens un autre exemple.

Étant donné le nombre d'extensions de fichier gérées par ASP.NET et les modifications apportées à la liste dans chaque version, la solution la plus fiable consiste à exécuter aspnet_regiis à la fin de l'installation. Cela signifie cependant que je n'ai aucun support pour la restauration ou la désinstallation. Si vous créez une nouvelle application dans IIS, cela n’a aucune importance, car elle sera supprimée par Wix. Si vous modifiez une application existante, vous pourrez peut-être trouver dans le registre quelle version d'ASP.NET est configurée et exécuter le aspnet_regiis de cette version pour annuler vos modifications.

Ce qui suit utilise 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>

C’est un peu plus simple. Je ne sais pas si cela fonctionne avec la mise à jour d'un AppPool existant, mais avec la création d'un pool d'applications et la définition de la version .NET.

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

J'ai trouvé un moyen différent d'utiliser WiX WebApplicationExtension. Vous pouvez consulter la solution complète ici . et ici .

J'aime Wix jusqu’à présent, mais mec, il faut beaucoup de fouilles pour trouver ce que vous cherchez.

  • Recherchez d'abord le dossier de la version .NET appropriée. Utilisez DirectorySearch / FileSearch pour effectuer une recherche.

  • Utilisez le chemin ci-dessus pour appeler aspnet_regiis.exe et définir la version de l'application Web à partir d'une action personnalisée.

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top