Je crée un programme d'installation pour un site Web ASP.Net en utilisant WiX. Comment définir la version ASP.Net dans IIS en utilisant WiX?Définir la version ASP.Net en utilisant WiX
Répondre
Nous utilisons ceci:
d'abord déterminer le framework .Net répertoire racine du Registre:
<Property Id="FRAMEWORKROOT">
<RegistrySearch Id="FrameworkRootDir" Root="HKLM"
Key="SOFTWARE\Microsoft\.NETFramework"
Type="directory" Name="InstallRoot" />
</Property>
Ensuite, à l'intérieur du composant qui installe votre site Web dans 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>
Pour un programme d'installation x64 (CECI EST IMPORTANT) Ajoutez Win64 = 'oui' à la recherche de registre, car les 32 bits environnement sur une machine 64 bits a une autre ruche de Registre (et un autre frameworkroot)
<RegistrySearch Id="FrameworkRootDir" Root="HKLM"
Key="SOFTWARE\Microsoft\.NETFramework"
Type="directory"
Name="InstallRoot" Win64='yes' />
Recherchez d'abord le dossier de version .NET correct. Utilisez DirectorySearch/FileSearch pour effectuer une recherche.
Utilisez le chemin ci-dessus pour appeler aspnet_regiis.exe et définir la version pour la webapp à partir d'une action personnalisée.
aspnet_regiis.exe -s W3SVC/1/ROOT/SampleApp1
Le "1" dans ce chemin est problématique. C'est un identifiant de site. Si vous avez plusieurs sites Web sur l'installation IIS, le site que vous souhaitez peut avoir un nombre différent et, si tel est le cas, cette commande ne l'affectera pas, mais modifiera un site non lié à la place. Plus de détails à http://weblogs.asp.net/owscott/archive/2006/05/30/ASPNet_5F00_regiis.exe-tool_2C00_-setting-the-default-version-without-forcing-an-upgrade-on- all-sites.aspx – Anthony
J'ai trouvé une autre façon en utilisant le WiX WebApplicationExtension. Vous pouvez consulter la solution complète here et here. J'aime Wix jusqu'ici, mais l'homme fait beaucoup de creuser pour trouver ce que vous cherchez.
J'ai essayé cette approche avec mon application MVC et ça ne fonctionnerait pas bien du tout. L'utilisation de aspnet_regiis dans une CustomAction pour changer l'AppPool en .NET 2.0 a fonctionné pour moi (voir la réponse de John Burns). – Jason
Voici ce qui a fonctionné pour moi après avoir lutté avec elle:
<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] et [VirtualDir] sont propriétés que vous devez définir vous-même. [VIRTUALDIR] n'est nécessaire que si vous définissez la version ASP.NET pour une application plutôt qu'un site Web entier.
Le séquencement de l'action personnalisée est critique. L'exécuter avant InstallFinalize l'amènera à échouer car l'application Web n'est pas disponible avant cela.
Merci à Chris Burrows pour un bon exemple de recherche de l'exécutable aspnet_regiis (Google "Utiliser WIX pour sécuriser une chaîne de connexion").
jb
Merci mon ami, à mon avis c'est la réponse la plus cohérente ici. J'ai essayé l'autre suggestion (qui laisse le pool d'applications comme .NET 1.1) et c'était juste trop compliqué et ne fonctionnait pas sur mon application MVC. Un point, j'ai dû utiliser l'attribut LongName pour FileSearch (au lieu de Name dont il se plaignait ne supporte que le format 8.3). Merci encore. – Jason
Désolé, que serait l'ExeCommand pour le paramétrer pour l'ensemble du site? –
De même, [SITE WEB] correspondrait-il à
Ne pas oublier d'activer ASP 2.0 sur le serveur
<iis:WebServiceExtension Id="ExtensionASP2" Group="ASP.NET v2.0.50727" Allow="yes" File="[NETFRAMEWORK20INSTALLROOTDIR]aspnet_isapi.dll" Description="ASP.NET v2.0.50727"/>
Ma réponse est fondamentalement la même chose que d'autres vues ici; Je voulais juste offrir aux gens un autre exemple. Étant donné le nombre d'extensions de fichiers qu'ASP.NET gère et que la liste change dans chaque version, je pense que la solution la plus fiable consiste à exécuter aspnet_regiis
à la fin de l'installation. Cela signifie cependant que je n'ai aucun support pour la restauration ou la désinstallation.Si vous créez une nouvelle application dans IIS, cela n'a pas vraiment d'importance car elle sera supprimée par Wix. Si vous modifiez une application existante, vous pourriez peut-être savoir à partir du registre quelle version d'ASP.NET est configurée et exécuter le aspnet_regiis
de cette version pour annuler vos modifications.
Ce qui suit utilise 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=""[NETFRAMEWORK40FULLINSTALLROOTDIR]aspnet_regiis.exe" -norestart -s "W3SVC/[IISWEBSITEID]/ROOT/[IISVDIRNAME]"" />
<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>
Ceci est un peu plus simple. Je ne sais pas si cela fonctionne sur la mise à jour d'un AppPool existant, mais travaille à la création d'un pool d'APP et au réglage de la version .NET.
<iis:WebServiceExtension Id="AMS_AppPool" Name="AccountManagementSVC1" Identity="other" ManagedPipelineMode="integrated" ManagedRuntimeVersion="v4.0" User="AMS_AppPoolUser" RecycleMinutes="120" />
Essayez sur Windows Server 2003 pour définir .NET 4, vous trouverez ASP.NET est laissé à la version 2.0. Il est nécessaire de définir la configuration du répertoire virtuel sur la version supérieure lorsque les paramètres du site Web ou du serveur par défaut sont inférieurs. Peut-être que c'est un bogue dans WIX, qu'il ne remappe pas le paramètre de version .NET du pool d'applications (qui n'existe que sur les versions IIS plus récentes) au paramètre de répertoire virtuel sur les anciennes versions. –
La vérification de la documentation montre que ce paramètre ne prend en charge que IIS 7 ou supérieur. Le deuxième meilleur choix pour moi est l'exécution de l'aspnet_regiis en tant qu'action personnalisée pour les anciennes versions (voir les autres réponses ici). Vous ne pouvez donc l'utiliser que si vous êtes sûr que tous vos clients/utilisateurs ont Windows 2008/Vista ou supérieur. –
- 1. Puis-je définir une licence personnalisée en utilisant WiX?
- 2. WiX - toujours remplacer la version précédente
- 3. WiX - Créer MSI en utilisant msbuild
- 4. Comment puis-je définir une icône pour un fichier associent en utilisant WiX?
- 5. cartes d'application dans IIS utilisant Wildcard WIX
- 6. VBScript/IIS - Comment définir automatiquement la version ASP.NET pour un site Web particulier
- 7. WiX définir le dossier App_Data permission de modifier pour NetworkService
- 8. WiX - Autorisations pour ASP.NET Temp Folder
- 9. Contrôle de version ASP.NET
- 10. Déployer un déclencheur CLR/procédure stockée en utilisant WiX
- 11. Comment installer une application ASP.Net MVC sur IIS 7 en utilisant Wix?
- 12. Howto obtenir la version SharePoint en utilisant le modèle d'objet
- 13. Comment détecter la version d'IIS en utilisant C#?
- 14. Définir l'extension de service Web existante sur "Autoriser" à l'aide de WiX
- 15. ASP.Net Version/Build Number
- 16. Asp.net Dev Server utilisant une mauvaise version du framework?
- 17. Comment stockez-vous la démarcation en utilisant WMD dans ASP.NET?
- 18. Connaître la version asp.net pour le code?
- 19. Pouvez-vous définir une désinstallation conditionnelle dans Wix?
- 20. Comment définir la version ASP.NET pour un répertoire virtuel à l'aide de IIS Manager 7.0?
- 21. iis wildcard redirect - numéro de wix
- 22. Définition de la version ASP.NET via MSBUILD
- 23. Comment écrire une entrée de registre lors de la désinstallation en utilisant wix
- 24. Où puis-je définir la version de mon application iPhone?
- 25. Comment mettre à niveau Windows Installer à partir d'un MSI (en utilisant WiX)? C'est possible?
- 26. Version ASP.NET de PHPList
- 27. Comment multiplier et définir la valeur de multiplier sur la zone de texte en utilisant JavaScript
- 28. WIX Propriété installée
- 29. façons efficaces à la personnalisation anonyme en utilisant ASP.NET + Cookie
- 30. Comment puis-je déterminer la version ASP.NET d'un répertoire virtuel ou d'un site Web utilisant C#?
wow. super-héros. Merci! –
@thjis: Pourquoi inscrivez-vous seulement ces trois extensions? Devez-vous également enregistrer, par exemple, les extensions aspx et asmx? Si vous aller de l'avant un registre toutes les extensions listées dans IIS juste pour être sûr? – Ian
@ian: Nous en avions seulement besoin, vous pouvez enregistrer toutes les extensions dont vous avez besoin. – thijs