Подтвердить что ты не робот

Задайте версию ASP.Net с помощью WiX

Я создаю установщик для веб-сайта ASP.Net с помощью WiX. Как установить версию ASP.Net в IIS с помощью WiX?

4b9b3361

Ответ 1

Мы используем это:

Сначала определите корневой каталог .Net framework из реестра:

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

Затем внутри компонента, который устанавливает ваш сайт в 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>

Для установщика x64 (ЭТО ВАЖНО) Добавьте Win64 = 'yes' в поиск реестра, потому что 32-разрядная среда на 64-битной машине имеет другой куст реестра (и другой каркас)

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

Ответ 2

Вот что сработало для меня после борьбы с ним:

  <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] и [VIRTUALDIR] - это свойства, которые вы должны определить сами. [VIRTUALDIR] необходим только в том случае, если вы устанавливаете версию ASP.NET для приложения, а не для всего веб-сайта.

Секвенирование пользовательских действий имеет решающее значение. Выполнение этого перед установкой InstallFinalize приведет к сбою, поскольку веб-приложение недоступно до этого.

Спасибо Крису Берроузу за правильный пример поиска исполняемого файла aspnet_regiis (Google "Использование WIX для защиты строки подключения" ).

ДБ

Ответ 3

Не забудьте включить ASP 2.0 на сервере

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

Вот вопрос софта

Ответ 4

Мой ответ в основном такой же, как и другие, увиденные здесь; Я просто хотел предложить людям еще один пример.

Учитывая количество расширений файлов, которые обрабатывает ASP.NET, и что список изменяется в каждой версии, я считаю, что самым надежным решением является запуск aspnet_regiis в конце установки. Это означает, однако, что у меня нет поддержки для отката или удаления. Я создаю новое приложение в IIS, это не имеет большого значения, потому что он будет удален Wix. Если вы изменяете существующее приложение, возможно, вы можете узнать из реестра, какая версия ASP.NET настроена, и запустить эту версию aspnet_regiis, чтобы отменить изменения.

В следующем примере используется 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 
    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>

Ответ 5

Это немного проще. Я не знаю, работает ли это при обновлении существующего AppPool, но работает для создания пула APP и установки версии .NET.

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

Ответ 6

Я нашел другой способ, используя WiX WebApplicationExtension. Вы можете проверить полное решение здесь и здесь,

Мне нравится Wix до сих пор, но человеку нужно много рыть, чтобы найти то, что вы ищете.

Ответ 7

  • Сначала найдите правильную папку версии .NET. Для выполнения поиска используйте DirectorySearch/FileSearch.

  • Используйте вышеуказанный путь для вызова aspnet_regiis.exe и установите версию для webapp из пользовательского действия.

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