2009-03-09 9 views
19

Je vous le demande sur la liste de diffusion WiX, mais il semble que ce soit en panne.Utiliser WiX pour créer un répertoire virtuel IIS

J'ai une application qui est à la fois une application de bureau et une application web qui s'exécute localement. J'ai créé quelques installateurs WiX de base, mais je n'ai pas encore utilisé l'extension IIS pour créer un répertoire virtuel sous IIS. Je n'ai pas été capable de trouver un exemple simple de la façon de le faire. Tout ce que je dois faire est de créer le répertoire virtuel, définir son port, et le pointer sur un vrai répertoire que je crée avec le reste de l'installateur.

Un bonus serait d'activer IIS sur la machine si elle n'est pas déjà activée, mais je suppose que ce n'est pas possible, et ce n'est pas un dealbreaker pour moi de toute façon.

Si cela est important, ce programme d'installation ne sera exécuté que sur des machines Vista.

Répondre

2

Je ne suis pas familier avec WiX, mais IIS 6 et 7 peuvent être gérés à l'aide d'objets WMI (Windows Management Instrumentation). J'ai utilisé PowerShell et C# pour créer des sites Web, des répertoires virtuels, des permissions, etc. sur IIS. Vous devriez pouvoir mettre la main sur ces objets dans la plupart des environnements de script.

8

Utilisez iis:WebVirtualDir et iis:WebApplication de http://schemas.microsoft.com/wix/IIsExtension espace de noms.

J'avais une question similaire plus tôt et je trouve l'article suivant très utile: Wix 3.0 Creating IIS Virtual Directory

+0

Wow, l'entrée du blog 1+ – CheGueVerra

+4

le lien vers le blog n'est plus valide. Pourriez-vous fournir un nouveau lien en direct. Merci. – Nordin

+0

Checkout ma réponse, je pense que c'est le code de l'article de blog. – Aardvark

21

Depuis l'article mentionné par David semble perdu, voici un exemple. Cela crée également une application dans le répertoire virtuel.

<?xml version="1.0" encoding="UTF-8"?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" 
    xmlns:iis="http://schemas.microsoft.com/wix/IIsExtension"> 
    <Product Id="6f2b2358-YOUR-GUID-HERE-aa394e0a73a2" Name="WixProject" Language="1033" Version="1.0.0.0" Manufacturer="WixProject" UpgradeCode="225aa7b2-YOUR-GUID-HERE-110ef084dd72"> 
     <Package InstallerVersion="200" Compressed="yes" /> 

     <Media Id="1" Cabinet="media1.cab" EmbedCab="yes" /> 

     <!-- Reference existing site at port 8080 --> 
     <iis:WebSite Id="My.Site" Description="My Site"> 
      <iis:WebAddress Id="My.Web.Address" Port="8080"/> 
     </iis:WebSite> 

     <Directory Id="TARGETDIR" Name="SourceDir"> 
      <Directory Id="ProgramFilesFolder"> 
       <Directory Id="INSTALLLOCATION" Name="WixProject"> 
        <Component Id="IIS.Component" Guid="{6FAD9EC7-YOUR-GUID-HERE-C8AF5F6F707F}" KeyPath="yes"> 
         <iis:WebVirtualDir Id="My.VirtualDir" Alias="foo" Directory="INSTALLLOCATION" WebSite="My.Site"> 
          <iis:WebApplication Id="My.Application1" Name="Web Application 1"/> 
         </iis:WebVirtualDir> 
        </Component> 

       </Directory> 
      </Directory> 
     </Directory> 

     <Feature Id="ProductFeature" Title="WixProject" Level="1"> 
      <ComponentRef Id="IIS.Component" /> 
     </Feature> 
    </Product> 
</Wix> 
5

Creuser dans le cache de Google (qui je pense est maintenant été purgés par Google) Je pense que ce qui suit est le code à l'entrée de blog manquant David Pokluda inclus dans sa réponse. J'ai dû faire un peu de reformatage pour obtenir ceci, désolé si c'est moche.

<?xml version="1.0" encoding="UTF-8"?> 
<!-- 
IMPORTANT 
1. need to add the schema iis.xsd to the property window 
2. add the following iis namespace 
3. add the Visual Studio reference WixIIsExtenion 
--> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" 
xmlns:iis="http://schemas.microsoft.com/wix/IIsExtension"> 
    <Product Id="7b523f47-YOUR-GUID-HERE-fea6be516471" 
      Name="Vince Wix 3 Web Service" 
      Language="1033" 
      Version="1.0.0.0" 
      Manufacturer="Vince LLC" 
      UpgradeCode="0a8c10df-YOUR-GUID-HERE-50b9ecdb0a41"> 
    <Package InstallerVersion="200" Compressed="yes" /> 

    <Media Id="1" Cabinet="WebAppWixProject.cab" EmbedCab="yes" /> 

    <Directory Id="TARGETDIR" Name="SourceDir"> 
     <Directory Id="ProgramFilesFolder"> 
     <Directory Id="WebApplicationFolder" Name="MyWebApp"> 
      <Component Id="ProductComponent" Guid="80b0ee2a-YOUR-GUID-HERE-33a23eb0588e"> 
      <File Id="Default.aspx" Name="Default.aspx" Source="..\MyWebApp\Default.aspx" DiskId="1" /> 
      <File Id="Default.aspx.cs" Name="Default.aspx.cs" Source="..\MyWebApp\Default.aspx.cs" DiskId="1"/> 
      <iis:WebVirtualDir Id="MyWebApp" Alias="MyWebApp" Directory="WebApplicationFolder" WebSite="DefaultWebSite"> 
       <iis:WebApplication Id="TestWebApplication" Name="Test" /> 
      </iis:WebVirtualDir> 
      </Component> 
     </Directory> 
     </Directory> 
    </Directory> 

    <!-- 
    IMPORTANT 
    Add a virtual directory to an existing web site 
    If put it inside the Component, a new Web Site will be created and uninstall will remove it 
    --> 
    <iis:WebSite Id='DefaultWebSite' Description='Default Web Site' Directory='WebApplicationFolder'> 
     <iis:WebAddress Id="AllUnassigned" Port="80" /> 
    </iis:WebSite> 

    <Feature Id="ProductFeature" Title="Vince Wix 3 Web Service" Level="1"> 
     <ComponentRef Id="ProductComponent" /> 
    </Feature> 
    </Product> 
</Wix> 

<!-- 
IMPORTANT 
To get rid of light.exe location error, do the following on the Linker Tab: 
Set culture to: en-US 
Supress Schema Validation in the Advanced Button 
--> 
+0

Le lien du cache est maintenant rompu. –

+0

Suppression du lien – Aardvark

0

Les extraits ci-dessus utilisent l'adresse Web: iAddress de manière incorrecte. Vous devez ajouter IP = "*" si vous voulez que cela fonctionne avec tous les sites Web qui correspondent au nom et au port. L'exemple ci-dessus échoue lors de l'installation s'il y a une adresse IP affectée au site Web dans IIS (wix CA ne le trouvera pas en général)

Rant: wix est terrible pour beaucoup de raisons, à mon avis et c'est une bonne Exemple. Si l'attribut est manquant, il ne fonctionnera que pour les sites Web avec l'adresse IP par défaut, ce qui n'est pas intuitif. Wix devrait au moins émettre un waring pour un élément IP manquant. De plus, l'adresse IP par défaut (localhost) est représentée par * dans la métabase IIS, en même temps dans le fichier wix * signifie tous les sites Web (pas seulement *). Donc c'est vraiment déroutant et pas intuitif du tout.

Questions connexes