Как установить приложение ASP.NET MVC 3 на IIS 6 с помощью WIX? - PullRequest
4 голосов
/ 02 января 2012

Вот некоторые соображения при установке на IIS-6:

  • Необходимо зарегистрировать ASP.NET 4 (вероятно, с использованием aspnet_regiis.exe)
  • Необходимо разрешить оба ASP.NETv2 и v4
  • Нужно зарегистрироваться aspnet_isapi.dll с поддержкой сопоставления с подстановочными знаками

И вот что у меня есть:

<iis:WebDirProperties Id='WebDirProperties' Script='yes' Read='yes
  Execute='no' WindowsAuthentication='yes' AnonymousAccess='no' 
  AuthenticationProviders='NTLM,Negotiate' />

<!-- SO has some good posts on selecting the website from a dropdown -->
<iis:WebSite Id='SelectedWebSite' Directory='WWWROOT' SiteId='[WEBSITE_ID]' Description='[WEBSITE_DESCRIPTION]'>
  <iis:WebAddress Id='AllUnassigned' Port='80' IP='*'/>
</iis:WebSite>

  <Component Id="ProjWebApp" Guid="{B4BE9223-7109-4943-AE4E-8F72FA350D02}" 
    Win64="$(var.IsWin64)" NeverOverwrite="yes" Transitive="yes">
    <CreateFolder/>

    <iis:WebAppPool Id="ProjAppPool" Name="[APPPOOLNAME]" Identity="networkService"
      ManagedRuntimeVersion="v4.0" ManagedPipelineMode="integrated" />
    <iis:WebVirtualDir Id="ProjVDir" DirProperties="WebDirProperties"
      Alias="[WEBAPPNAME]" Directory="WEBFILESDIR" WebSite="SelectedWebSite">
      <iis:WebApplication Id="ProjApp" Name="[WEBAPPNAME]" WebAppPool="ProjAppPool">
        <iis:WebApplicationExtension
            CheckPath="no"
            Script="yes"
            Executable="[ASPNETISAPIDLL]"
            Verbs="GET,HEAD,POST"
            />
      </iis:WebApplication>
    </iis:WebVirtualDir>
  </Component>

  <!-- other apps may start using it once installed so it must be permanent -->
  <Component Id="EnableASPNet4Extension" Permanent="yes" Guid="{C8CDAB96-5DDC-4B4C-AD7E-CD09B59F7813}">
    <iis:WebServiceExtension Id="ASPNet4Extension" Group="ASP.NET v4.0.30319"
      Allow="yes" File="[ASPNETISAPIDLL]" Description="ASP.NET v4.0.30319" 
      UIDeletable="no"
      />
  </Component>

И у менянастраиваемое действие для регистрации ASP.NET в IIS:

<?if $(var.Platform) = x64 ?>
  <CustomAction Id="SetProperty_AspNetRegIIS_InstallNet40Cmd"
    Property="AspNetRegIIS_InstallNet40Cmd"
    Value="&quot;[NETFRAMEWORK40FULLINSTALLROOTDIR64]aspnet_regiis.exe&quot; -ir"/>
<?else?>
  <CustomAction Id="SetProperty_AspNetRegIIS_InstallNet40Cmd"
    Property="AspNetRegIIS_InstallNet40Cmd"
    Value="&quot;[NETFRAMEWORK40FULLINSTALLROOTDIR]aspnet_regiis.exe&quot; -ir"/>
<?endif?>

Проблема

Это почти работает.На данный момент есть две проблемы:

  1. Расширение IIS не относится к управляемой версии среды выполнения на IIS-6, поэтому в приложении не установлена ​​версия ASP.NET.
  2. Если я использую aspnet_regiis.exe -s APP_PATH, чтобы зарегистрировать его после его создания, он перезаписывает сопоставление с подстановочными знаками (и я не знаю командной строки, которую я могу запустить для восстановления).

Учитываяперечисленные выше недостатки: как я могу использовать WIX для установки приложения ASP.NET MVC 3 на IIS-6 с правильным сопоставлением подстановочных знаков, когда на нем уже установлен ASP.NET 2?

1 Ответ

2 голосов
/ 04 января 2012

Оказывается, это была глупая ошибка с моей стороны. Вышеприведенного достаточно для того, чтобы приложения ASP.NET v4 работали, когда части, которые я не включил (настраиваемые действия и определения свойств), верны.

В моем случае я случайно указал путь к aspnet_isapi.dll, поэтому он не был правильно подобран.

Расширение IIS не соответствует управляемой версии среды выполнения на IIS-6, поэтому в приложении не установлена ​​версия ASP.NET.

Это частично правда. Хотя при настройке пула приложений он не использует управляемую версию среды выполнения, IIS фактически выбирает версию ASP.NET, как только правильно сопоставляется с aspnet_isapi.dll. Как только я исправил путь, все заработало правильно.

Если я использую aspnet_regiis.exe -s APP_PATH, чтобы зарегистрировать его после его создания, он перезаписывает сопоставление с подстановочными знаками (и я не знаю командной строки, которую можно запустить для ее восстановления).

Вы можете использовать adsutil.vbs для управления этим, если необходимо:

C:\Inetpub\AdminScripts>adsutil.vbs enum w3svc/998577302/root/AppName
KeyType                         : (STRING) "IIsWebVirtualDir"
...
ScriptMaps                      : (LIST) (1 Items)
  "*,C:\WINDOWS\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll,1,GET,HEAD
,POST"

Используя команду set в adsutil.vbs, вы можете при необходимости установить свойство ScriptMaps.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...