2009-03-09 19 views
19

Preguntaría esto en la lista de correo de WiX, pero parece estar fuera de servicio.Usando WiX para crear un directorio virtual de IIS

Tengo una aplicación que es tanto una aplicación de escritorio como una aplicación web que se ejecuta localmente. He creado un par de instaladores básicos de WiX, pero aún no he usado la extensión IIS para crear un directorio virtual en IIS. No he podido encontrar un ejemplo simple de cómo hacer esto. Todo lo que necesito hacer es crear el directorio virtual, establecer su puerto y apuntarlo a un directorio real que estoy creando con el resto del instalador.

Una bonificación sería habilitar IIS en la máquina si aún no está habilitada, pero supongo que eso no es posible, y de todas maneras no es un obstáculo para mí.

Si es importante, este instalador solo se ejecutará en máquinas con Vista.

Respuesta

2

No estoy familiarizado con WiX, pero tanto IIS 6 como 7 pueden administrarse utilizando objetos WMI (Instrumentación de administración de Windows). He usado tanto PowerShell como C# para crear sitios web, directorios virtuales, permisos, etc. en IIS. Debería poder tener acceso a estos objetos desde la mayoría de los entornos de scripting.

8

Use iis:WebVirtualDir y iis:WebApplication de http://schemas.microsoft.com/wix/IIsExtension namespace.

que tenía una pregunta similar a principios y me encontré con el siguiente artículo bastante útil: Wix 3.0 Creating IIS Virtual Directory

+0

Wow, buena entrada de blog 1+ – CheGueVerra

+4

el enlace al blog ya no es válido. ¿Podría proporcionar un nuevo enlace en vivo? Gracias. – Nordin

+0

Pagar mi respuesta, creo que este es el código del artículo del blog. – Aardvark

21

Dado que el artículo mencionado por David parece perdido, aquí es un ejemplo. Esto también crea una aplicación en el directorio virtual.

<?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

de excavación en la caché de Google (que creo que ahora se ha purgado por Google) Creo que el siguiente es el código para la entrada de blog que faltan David Pokluda incluyó en su respuesta. Tuve que hacer un reformateo para poner esto en SO, lo siento si es feo.

<?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

El enlace de caché ahora está roto. –

+0

Se ha eliminado el enlace – Aardvark

0

Los fragmentos de arriba utilizan el iis: WebAddress de una manera incorrecta. Necesita agregar IP = "*" si desea que esto funcione con todos los sitios web que coinciden con el nombre y el puerto. El ejemplo anterior falla durante la instalación si hay una dirección IP asignada al sitio web en IIS (la CA de wix no lo encontrará en general)

Rant: wix es terrible por muchas razones, en mi opinión, y esta es una buena ejemplo. Si falta el atributo, solo funcionará para sitios web con la dirección IP predeterminada: qué poco intuitivo es esto. Wix debería al menos emitir un waring para un elemento IP faltante. Además, la IP predeterminada (localhost) se representa como * en la metabase de IIS, al mismo tiempo en el archivo wix * significa todos los sitios web (no solo *). Entonces es realmente confuso y no es intuitivo en absoluto.

Cuestiones relacionadas