views:

3624

answers:

4

I'd ask this on the WiX mailing list, but it seems to be down.

I have an application which is both a desktop app and a web app which runs locally. I've created a couple of basic WiX installers, but haven't yet used the IIS extension to create a virtual directory under IIS. I haven't been able to find a simple example of how to do this. All I need to do is create the virtual directory, set its port, and point it at a real directory which I'm creating with the rest of the installer.

A bonus would be enabling IIS on the machine if it's not already enabled, but I'm guessing that's not possible, and isn't a dealbreaker for me anyway.

If it matters, this installer will only be run on Vista machines.

A: 

I'm not familiar with WiX, but both IIS 6 and 7 can be managed using WMI (Windows Management Instrumentation) objects. I've used both PowerShell and C# to create websites, virtual directories, permissions etc on IIS. You should be able to get your hands on these objects from most scripting environments.

tarn
+5  A: 

Use iis:WebVirtualDir and iis:WebApplication from http://schemas.microsoft.com/wix/IIsExtension namespace.

I had a similar question earlier and I found the following article quite useful: Wix 3.0 Creating IIS Virtual Directory

David Pokluda
Wow, nice blog entry 1+
CheGueVerra
@DavidPokluda, the link to the blog is no longer valid. Could you provide new live link. Thanks.
Nordin
Checkout my answer, I think this is the code of the blog article.
Aardvark
+3  A: 

Since the article mentioned by David seems lost, here is an example. This also creates an application in the virtual directory.

<Product Id="6f2b2358-8377-46e3-adc5-aa394e0a73a2" Name="WixProject" Language="1033" Version="1.0.0.0" Manufacturer="WixProject" UpgradeCode="225aa7b2-399c-4189-9a6c-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-D2B0-4471-A657-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>

Eric Smith
A: 

Digging in the Google cache (scroll down) I think this is the code to the missing blog entry David included in his answer. I had to do some reformatting to get this into SO, sorry if its ugly.

<?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"&gt;
<Product Id="7b523f47-ef58-4d3c-8ca1-fea6be516471" Name="Vince Wix 3 Web Service" Language="1033" Version="1.0.0.0" Manufacturer="Vince LLC" UpgradeCode="0a8c10df-fe3e-4aec-8954-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-a102-46ec-a456-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-->
Aardvark