2009-03-26 8 views
15

Pour IIS6 je peux utiliser les aides IIS dans Wix pour installer une application web comme celui-ci:Comment installer une application ASP.Net MVC sur IIS 7 en utilisant Wix?

<iis:WebAppPool 
    Id="AP_MyApp" 
    Name="My Application Pool" 
    Identity="networkService" /> 
<iis:WebApplication 
    Id="WA_MyApp" 
    Name="MyApp" 
    WebAppPool="AP_MyApp"> 
    <iis:WebApplicationExtension 
     CheckPath="no" 
     Executable="[NETFRAMEWORK20INSTALLROOTDIR]aspnet_isapi.dll" 
     Verbs="GET,HEAD,POST"/> 
</iis:WebApplication> 

Malheureusement, cela ne fonctionne pas pour IIS7. Nous ne souhaitons pas utiliser le mécanisme aspnet_isapi.dll et voulons que le pipeline intégré gère le routage des demandes. Le pool d'applications créé par ce script est en mode classique, pas en mode intégré, donc aucun des gestionnaires ne fonctionne correctement.

Comment puis-je installer correctement une application MVC sur IIS 7?

+0

Eh bien, malheureusement, les extensions IIS ne sont pas encore supportées par IIS7. – alexn

Répondre

2

Les extensions IIS pour WIX ne prennent pas en charge IIS7. L'équipe IIS réécrit la métabase entre les versions. Il y a pas mal de choses qui ne marchent pas, le manque d'un pool d'applications intégré parmi eux.

Jusqu'à ce que les extensions se réécrits, vous vous retrouvez avec trois options:

  • utilisation construire dans des actions personnalisées pour appeler appcmd.exe
  • Utilisez XMLConfig pour mettre à jour applicationHost.config
  • Écrivez votre propre actions personnalisées

J'ai opté pour l'option xmlconfig pour le moment car vous pouvez le faire dans un composant et l'attacher à une entité.

+0

Ce n'est pas tout à fait vrai. Mike a fait beaucoup de travail pour obtenir IIS7 supporté par les CustomActions existantes. Malheureusement, le code ne prend en charge que les éléments "hérités". Comme indiqué ci-dessus, la tuyauterie intégrée a besoin d'un code personnalisé. –

+1

OK - Je ne savais pas que le travail était en cours pour prendre en charge IIS7 - J'ai vu un commentaire suggérant que le support d'Apache pourrait arriver plus tôt: p J'avais l'impression que certaines choses fonctionnaient si vous avez activé la compatibilité avec la métabase IIS6 et c'est tout. . Bon à entendre. – matthewthurlow

+1

Pour être clair, vous avez toujours besoin de la compatibilité avec la métabase IIS6 mais, au moins, cela devrait fonctionner. Et c'était mon commentaire off-off quand j'étais énervé à IIS. –

4

Merci à @matthewthurlow, j'ai pu utiliser les utils XML pour réaliser ce que je devais faire:

<util:XmlFile 
    Id="ModifyAppPoolPipelineType" 
    Action="setValue" 
    ElementPath="//configuration/system.applicationHost/applicationPools/add[\[]@name='My Application Pool'[\]]/@managedPipelineMode" 
    File="[WindowsFolder]System32\inetsrv\config\applicationHost.config" 
    Value="Integrated"/> 

Le reste des actions ne semblent fonctionner correctement avec IIS 7.

+2

Lors de la désinstallation comment prenez-vous l'entrée? – CheGueVerra

11

Personnellement, je recommande d'utiliser AppCmd.exe (la première puce de matthewthurlow) car vous n'avez pas besoin de compter sur les composants de gestion hérités en cours d'installation, ni de risquer de modifier manuellement la configuration XML.

Si vous n'êtes pas à l'aise avec APPCMD, Mike Volodarski a un grand article sur Getting Started with AppCmd.exe et Microsoft IIS Configuration Reference est excellent, offrant l'interface utilisateur, le code et APPCMD exemples pour modifier chacun des éléments de configuration (par exemple Application Pools). Le IIS7 Administration Pack inclut également un éditeur de configuration qui vous permet de generate AppCmd scripts à partir de n'importe quelle configuration existante.

Pour intégrer AppCmd ​​dans WiX, vous devez créer et planifier deux actions personnalisées pour chaque commande. Il y a des informations générales dans le manuel documenting this procedure de WiX v3, et j'ai inclus un exemple concret ci-dessous.

D'abord, vous devez mettre en place une action immédiate pour stocker la ligne de commande dans une propriété:

<CustomAction 
    Id="CreateAppPool_Cmd" 
    Property="CreateAppPool" 
    Execute="immediate" 
    Value="&quot;[WindowsFolder]system32\inetsrv\APPCMD.EXE&quot; add apppool /name:&quot;[APP_POOL_NAME]&quot;" /> 

Ensuite, vous configurez une action différée qui fait référence à cette propriété:

<CustomAction 
    Id="CreateAppPool" 
    BinaryKey="WixCA" 
    DllEntry="CAQuietExec" 
    Execute="deferred" 
    Return="ignore" 
    Impersonate="no"/> 

Et Enfin, vous devez planifier ces derniers. L'action immédiate qui définit les propriétés semble fonctionner correctement après InstallFinalize et l'action différée fonctionne après InstallFiles. Je n'ai pas encore compris les actions de retour en arrière.MapGuide Open Source exécute cette méthode de manière extensive; Vous pouvez voir la planification CA dans notre fichier MapGuide.wxs et la définition CA dans notre fichier IIS7.wxs.

+0

Merci pour la bonne information Jason! – si618

+0

Cela m'a été très utile hier, et merci pour les liens vers les exemples aussi! –

Questions connexes