Установить версию ASP.Net с помощью WiX - PullRequest
25 голосов
/ 02 октября 2008

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

Ответы [ 7 ]

22 голосов
/ 14 октября 2008

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

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

<RegistrySearch Id="FrameworkRootDir" Root="HKLM"
        Key="SOFTWARE\Microsoft\.NETFramework" 
        Type="directory" 
        Name="InstallRoot" Win64='yes' />
13 голосов
/ 29 мая 2009

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

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

ДБ

5 голосов
/ 03 сентября 2009

Не забудьте включить 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 голосов
/ 12 марта 2012

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

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

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

<iis:WebServiceExtension Id="AMS_AppPool" Name="AccountManagementSVC1" Identity="other"  ManagedPipelineMode="integrated" ManagedRuntimeVersion="v4.0" User="AMS_AppPoolUser" RecycleMinutes="120" />
1 голос
/ 03 октября 2008

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

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

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

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

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

...