Установить ASP.Net версию с использованием WiX

StackOverflow https://stackoverflow.com/questions/163531

  •  03-07-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

Сначала определите корневой каталог .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-битной машине имеет другой куст реестра (и другой root-корень)

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

Другие советы

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

  <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 для защиты строки подключения").

джей би

Не забудьте включить 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"/>

Вот мягкий вопрос

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

Учитывая количество расширений файлов, обрабатываемых 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'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>

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top