2009-03-09 10 views
19

Ich würde dies auf der WiX-Mailingliste fragen, aber es scheint nicht verfügbar zu sein.Verwenden von WiX zum Erstellen eines virtuellen IIS-Verzeichnisses

Ich habe eine Anwendung, die sowohl eine Desktop-App als auch eine Web-App ist, die lokal ausgeführt wird. Ich habe ein paar grundlegende WiX-Installer erstellt, aber habe noch nicht die IIS-Erweiterung verwendet, um ein virtuelles Verzeichnis unter IIS zu erstellen. Ich konnte kein einfaches Beispiel dafür finden. Alles, was ich tun muss, ist das virtuelle Verzeichnis zu erstellen, seinen Port zu setzen und es auf ein echtes Verzeichnis zu richten, das ich mit dem Rest des Installers erstelle.

Ein Bonus würde IIS auf dem Computer aktivieren, wenn es nicht bereits aktiviert ist, aber ich denke, das ist nicht möglich, und ist sowieso kein Dealbreaker für mich.

Wenn es darauf ankommt, wird dieses Installationsprogramm nur auf Vista-Computern ausgeführt.

Antwort

2

Ich kenne mich mit WiX nicht aus, aber IIS 6 und 7 können mit WMI-Objekten (Windows Management Instrumentation) verwaltet werden. Ich habe PowerShell und C# verwendet, um Websites, virtuelle Verzeichnisse, Berechtigungen usw. auf IIS zu erstellen. Sie sollten in der Lage sein, diese Objekte aus den meisten Skripting-Umgebungen in die Hände zu bekommen.

8

Verwenden Sie iis:WebVirtualDir und iis:WebApplication von http://schemas.microsoft.com/wix/IIsExtension Namespace.

ich eine ähnliche Frage früher hatte und ich fand den folgenden Artikel ganz nützlich: Wix 3.0 Creating IIS Virtual Directory

+0

Wow, schöner Blogeintrag 1+ – CheGueVerra

+4

Der Link zum Blog ist nicht mehr gültig. Könnten Sie einen neuen Live-Link bereitstellen? Vielen Dank. – Nordin

+0

Kasse meine Antwort, ich denke, das ist der Code des Blog-Artikels. – Aardvark

21

Da der Artikel von David erwähnt, hier scheint verloren ist ein Beispiel. Dies erstellt auch eine Anwendung im virtuellen Verzeichnis.

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

Graben in den Google-Cache (die ich denke, wird nun von Google gespült worden) Ich denke, die folgenden ist der Code der fehlenden Blogeintrag David Pokluda in seiner Antwort enthalten. Ich musste etwas umformatieren, um das in SO zu bringen, tut mir leid, wenn es hässlich ist.

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

Cache-Verbindung ist jetzt unterbrochen. –

+0

Die Verknüpfung wurde entfernt – Aardvark

0

Die obigen Snippets verwenden die iis: WebAddress in einer unpassenden Weise. Sie müssen IP = "*" hinzufügen, wenn dies mit allen Websites funktionieren soll, die mit dem Namen und dem Port übereinstimmen. Das obige Beispiel schlägt während der Installation fehl, wenn der Website in IIS eine IP-Adresse zugewiesen wurde (wix CA findet sie nicht im Allgemeinen)

Rant: wix ist schrecklich aus vielen Gründen, meiner Meinung nach und das ist ein gutes Beispiel. Wenn das Attribut fehlt, wird es nur für Websites mit der Standard-IP funktionieren - wie unintuitiv ist dies. Wix sollte zumindest ein Waring für ein fehlendes IP-Element ausgeben. Außerdem wird die Standard-IP (localhost) als * in der IIS-Metabasis dargestellt, gleichzeitig in der wix-Datei * bedeutet alle Websites (nicht nur *). Es ist also wirklich verwirrend und nicht intuitiv.