Pergunta

Estou criando um instalador para um site ASP.Net usando WiX. Como você define a versão ASP.Net no IIS usando WiX?

Foi útil?

Solução

Nós usamos esta:

Em primeiro lugar determinar o diretório quadro raiz Net a partir do registro:

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

Então, dentro do componente que instala seu site no 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>

Para um instalador x64 ( ESTE É IMPORTANTE ) Adicionar Win64 = 'sim' para a busca do registro, porque o ambiente de 32 bits em uma máquina pedaços 64 tem uma seção de registro diferente (e um frameworkroot diferente)

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

Outras dicas

Aqui está o que funcionou para mim depois de lutar com ele:

  <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] e [VIRTUALDIR] são propriedades que você tem que definir a si mesmo. [VIRTUALDIR] só é necessário se você estiver configurando a versão ASP.NET para uma aplicação em vez de um site inteiro.

O seqüenciamento da ação personalizada é crítica. Executá-lo antes InstallFinalize fará com que ele falhar porque o aplicativo web não está disponível até depois disso.

Graças a Chris Burrows para um bom exemplo de encontrar o aspnet_regiis executável (Google "Usando WIX para proteger uma cadeia de ligação").

jb

Não se esqueça de habilitar o ASP 2.0 no servidor

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

Aqui está o sof-question

A minha resposta é basicamente o mesmo que os outros visto aqui; Eu só queria oferecer às pessoas um outro exemplo.

Dado o número de extensões de arquivos que alças ASP.NET, e que a lista mudanças em cada versão, eu acho que a solução mais confiável é executar aspnet_regiis no final da instalação. Isso faz embora média, que não têm qualquer apoio para rollback ou desinstalação. I você está criando um novo aplicativo no IIS, isso realmente não importa, porque será deletado por Wix. Se você está modificando uma aplicação existente, talvez você possa descobrir a partir do registro de qual versão do ASP.NET está configurado e executado aspnet_regiis dessa versão para desfazer as alterações.

A seguir tem 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>

Este é um pouco mais simples. Eu não sei se isso funciona na atualização de um AppPool existentes, mas obras para a criação de um pool de aplicativo e definir a versão .NET.

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

Eu encontrei uma maneira diferente usando o WiX WebApplicationExtension. Você pode conferir a solução completa aqui e aqui .

Gosto Wix até agora, mas o homem faz isso tem um monte de escavação para encontrar o que está procurando.

  • Primeiro, encontre a pasta versão .NET correta. Use DirectorySearch / FileSearch para executar a busca.

  • Use o caminho acima para aspnet_regiis.exe chamada e definir a versão para o webapp a partir de uma ação personalizada.

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

    |
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top