November 2010 (1)
August 2010 (1)
July 2010 (1)
June 2010 (3)
July 2009 (3)
June 2009 (1)
May 2009 (1)
February 2009 (1)
January 2009 (1)
November 2008 (3)
October 2008 (4)
September 2008 (9)
August 2008 (6)
July 2008 (3)
June 2008 (3)
January 2008 (1)
November 2007 (2)
October 2007 (6)
September 2007 (5)
August 2007 (22)
July 2007 (6)
June 2007 (1)
May 2007 (3)
April 2007 (27)
March 2007 (8)
February 2007 (6)
September 2006 (2)
August 2006 (4)
July 2006 (9)
June 2006 (17)
May 2006 (20)
April 2006 (12)
March 2006 (9)
February 2006 (4)
January 2006 (3)
December 2005 (2)
November 2005 (4)
October 2005 (5)
September 2005 (37)
August 2005 (83)
July 2005 (6)

Active Directory / LDAP (0)
ASP.Net (19)
Blackberry Development (4)
c# (34)
c++ (3)
Code Camp (1)
Excel (1)
Exchange (3)
Front Page 2003 (6)
FTP User Editor (4)
IIS (146)
IIS - Log Parser (7)
IIS / FTP (12)
IIS / Tools / Administration (42)
IIS / Tools / Authentication (6)
IIS / Tools / Compression (8)
IIS / Tools / Crash & Hang (12)
IIS / Tools / ISAPI Filters (17)
IIS / Tools / Log Files (17)
IIS / Tools / Scripts (28)
IIS / Tools / Security (9)
IIS / Tools / SSL (6)
IIS 7 (3)
Internet Information Server (1)
Me (Chris Crowe) (6)
MIME Types (1)
Misc (72)
Oulook Express (2)
Silverlight (1)
SQL Server (27)
SQL Server CTE (1)
Vista (15)
Vista Gadgets (8)
Visual Studio (11)
Voice over BroadBand (1)
Windows (33)
Windows Powershell (3)
Windows Sharepoint Services (0)
Windows Sharepoint Services (15)
Windows Vista (14)
Wine Cellar (1)
WMI (8)


June 2006 (17)

IIS Metabase Explorer
The IIS Metabase Explorer provides a graphical user interface for viewing and editing IIS metabase stores. You can use Metabase Explorer to export and import keys and subkeys, copy keys and subkeys, edit security settings for keys, and compare records within the metabase.

This tool can be used to perform a wide variety of tasks to help you manage the IIS Metabase. For example, you can use it to back up or restore parts of the metabase. You can also use it to reset the default IIS Web site, or allow a non-administrator account to change the metabase by adding a restricted write access control list (ACL) to specific metabase nodes.

Metabase Explorer can be used to edit the metabase for IIS versions 4.0, 5.0, and 6.0, and lets you connect to both local and remote metabases.

To use Metabase Explorer, you’ll need to install the IIS 6.0 Resource Kit Tools (see Knowledge Base article 840671 The IIS 6.0 Resource Kit Tools for download details).

MetabaseExplorer is compatible with the Microsoft® Windows® 2000, Windows XP Professional, and Windows Server 2003 operating systems. It also requires Microsoft® .NET Framework version 1.1

c# - How to display the HttpExpires property and display its meaning...

The HttpExpires property is documented at the following URL.

This simple c# console application will display the settings for the HttpExpires property at the root level of the default web site.

Basically the value is encoded as follows:

  • If the value is a blank string then there is no content expiry.
  • If the value starts with a D, then it is using a dynamic expiration period. This period is appended after the D and is stored as the number of seconds in hexidecimal format.

    Example: “D, 0x15180”    - this 0x15180 is the same as 86,400 seconds or 1 day.
  • If the value starts with an S then the following value is a GMT time of when the expiration will take place.

    Example: “S, Sat, 08 Jul 2006 12:00:00 GMT”

using System;
using System.Collections.Generic;
using System.Text;
using System.DirectoryServices;
namespace IISHTTPExpires
    class Program
        static void Main(string[] args)
            Console.WriteLine("IIS HTTP Expires - c#");
            // Serve to connect to...
            string ServerName = "LocalHost";
            // Define the path to the metabase
            string MetabasePath = "IIS://" + ServerName + "/W3SVC/1/ROOT";
                // Talk to the IIS Metabase to read the MimeMap Metabase key
                DirectoryEntry Entry = new DirectoryEntry(MetabasePath);
                // Get the Mime Types as a collection
                PropertyValueCollection pvc = Entry.Properties["HTTPExpires"];
                string HttpExpires = pvc.Value.ToString();
                if (HttpExpires.Length == 0)
                    Console.WriteLine("HttpExpires is not enabled!");
                    char HttpExpiresType = HttpExpires[0];
                    switch (HttpExpiresType) { case 'D':
                            string Seconds = HttpExpires.Substring(3);
                            if (Seconds == "0")
                                Seconds = "Immediately";
                            else if (Seconds.StartsWith("0x")==true)
                                Seconds = "in " + int.Parse(HttpExpires.Substring(5),
                                    System.Globalization.NumberStyles.HexNumber).ToString() + " Seconds";
                                Seconds = "in " + Seconds + " Seconds";
                            Console.WriteLine("HttpExpires {0}", Seconds);
                        case 'S':
                            Console.WriteLine("HttpExpires {0}", HttpExpires.Substring(2));
                            Console.WriteLine("Unknown HttpExpires Type : {0}", HttpExpiresType);
            catch (Exception ex)
                Console.WriteLine("Failed to read HttpExpires property with the following exception: \n{0}",

c# - How to display the IP Address, TCP/IP Port, and Host Header values from IIS
using System;
using System.Collections.Generic;
using System.Text;
using System.DirectoryServices;
namespace EnumSites
    class Program
        static void Main(string[] args)
            DirectoryEntry entry = new DirectoryEntry("IIS://localhost/w3svc/1");
            PropertyValueCollection pvc = entry.Properties["ServerBindings"];
            foreach (object value in pvc)
                // Format is IPAddress:Port:HostHeader
                string[] Bits = value.ToString().Split(':');
                string IPAddress = Bits[0];
                string TCPIPPort = Bits[1];
                string HostHeader = Bits[2];
                Console.WriteLine("IP = {0}, Port = {1}, Header = {2}", 
                    (IPAddress.Length == 0) ? "(All Unassigned)" : IPAddress, 
                    (HostHeader.Length == 0) ? "(No Host Header)" : HostHeader);

This simple code will allow you to display the IP Address, TCP/IP Port, and Host Header values for the default web site. The default web site has an Instance ID of 1.

If you want to display for a different web site then change the "IIS://localhost/w3svc/1" to another instance. You can determine the instance ID from the log file name in the log entry properties dialog in the IIS manager.


Christchurch .NET Users Group Meeting - June 21st, 2006

I had the pleasure to present to the Christchurch .NET Users Group ( ) last evening. It was a very cold night with hail, sleet, rain and we had around 25 people attend.

I spoke about three topics in my presentation:

IIS Scripting

In the talk on IIS Scripting I discussed the different providers that were available to manage IIS from a command line script or application. These include ADSI and WMI, Admin Base Objects and the new IIS 7 Managed Provider.


IIS Diagnostic Tools

In the discussion about IIS diagnostic tools I presented details on the following tools from the Debug Diagnostic Toolkit for IIS.

Authentication and Access Control Diagnostics

Authentication and Access Control Diagnostics (Authdiag) Version 1.0 allows you to review, test, and correct problems with Internet Information Services (IIS) authentication and authorization. You can use Authdiag to check settings on Web sites, FTP sites, virtual directories, Web directories, and files. Authdiag can help you troubleshoot the following types of issues:

SSL Diagnostics

It provides a centralized location to display all relevant SSL configuration information. Most of this information is stored in the metabase, which is the main IIS configuration file. Information related to certificates is also stored in the Windows registry.

SSL Diagnostics checks for the correct configuration of SSL objects and settings. These include client and server certificates, ports, private keys, and Web site states.

Administrators can test whether their current server certificate is working properly by temporarily replacing the current certificate with a self-signed certificate. Administrators are able to test their certificates with a single click of the mouse.

Administrators can use SSL Diagnostics to quickly simulate the connection, or handshake, between the server and browser, and review the response from the server. This is very helpful for determining where in the SSL handshake process the connection is breaking down.

Debug Diagnostics

Debug Diagnostics (DebugDiag) 1.0 is a comprehensive tool designed to help IIS administrators or developers determine why a IIS worker process is crashing, hanging, or memory leak. It offers a simple User Interface to build rules for capturing these common problems with web applications and also offers a built-in analysis system



In the IIS 7 section of the presentation I discussed some of the benefits of the new server and its new modular architecture, new UI, new extensibility, and diagnostics functionality.

I showed a number of demos of IIS 7 including a custom Basic Authentication module, a custom Directory Browsing Module, Tracing Features, Debugging a crashing application pool with Debug Diag and some features of the new User Interface.


My presentation was made on the Beta 2 build of Vista Ultimate and most of the tools worked fine on Vista and IIS 7 even though they are not designed to. As far as I know no body left early - a good sign.... IIS can be a dry topic to developers but I hope they learned something useful about the new product and of course scripting and diagnostics that they may not have known previously.

IIS Insider - June 2006 - Written by me....

I have had my first set of questions & answers on the Microsoft FTP Server published in June IIS Insider section on

IIS Insider is a monthly column designed to answer your questions on how to troubleshoot and make the most of Microsoft Internet Information Services (IIS).

IIS Insider

The questions I presented are:

  • Adding Virtual Directories to an FTP Server
  • Administering Physical Directories on an FTP Site
  • User Isolation Mode options

The article is up for the month of June (it only went up today June 22) at

After June you can see the details on the IIS Insider column archives

Ripcord software has released IISxpress for IIS 5, 5.1 and 6.0 ( that is 2k, XP, and 2k3)

IISxpress is a compression engine for IIS 5.0/5.1/6.0. Based on the ZLIB compression library IISxpress is a high performance, stable, scalable compression extension to IIS. Version 2.0 introduces native 64bit support, new configuration wizards, significant performance improvements (over 100% in some cases) and a new Community Edition which is free for non-commercial, non-governmental use.

IISxpress uses an opt-out rule model to simplify configuration - all content is compressed unless configured otherwise. IISxpress is pre-configured with a suitable set of default rules when first installed, you are free to add and remove rules as you see fit. IISxpress supports rules based on the extension of the file requested, the MIME (content type) type of the response, the path of the request (URI) or the source IP address of the client.

IISxpress allows you to track compression effectiveness at the server level right down to each individual request allowing you to fine tune your server's performance for real world loading.

Key features

  • User friendly interface
  • Highly configurable
  • Real time compression performance monitoring
  • NEW in 2.0: Helpful context sensitive wizards
  • NEW in 2.0: 64bit and multi-core support
  • NEW in 2.0: Community Edition version – free for non-commercial, non-governmental use.
  • Scalable – CPU and memory load sensitive
  • Supports ASP, ASP.NET, etc.



  • Faster content delivery
  • Improved site responsiveness
  • Less server bandwidth usage
  • 100% client browser and search bot compatibility



  • Internet Web Site Administrators
  • Intranet Web Site Administrators
  • Web Site Developers


Supported Platforms

  • Windows 2003: All server versions, 32 and 64 bit
  • Windows 2000: Professional and all sever versions
  • Windows XP Professional: 32 and 64 bit

See for more details

Windows Vista Beta 2 - You can now download without a MSDN Subscription!!!

Microsoft have not by the looks of things released the Beta 2 version of Windows Vista to the general public.

This Beta 2 release is now available in three languages (English, German, and Japanese) and in 32-bit and 64-bit editions.

When you register for the Customer Preview Program you will receive the Beta 2 release plus Windows Vista Release Candidate 1 (RC1) — the next major pre-release of Windows Vista — when it is available later this year. The information on this page pertains to both Beta 2 and RC1.

The Customer Preview Program is available in a limited quantity both through download and DVD kit ordering. Once the allotted quantity has been reached the program will be closed and no new orders will be accepted.

There are two ways to get Windows Vista Beta 2:

  1. Order the DVD kit and have it shipped to your home or office.
  2. Download the ISO file to your PC
    (An ISO file is an exact representation of a CD or DVD, including the content and the logical format. Once you download the ISO file, you’ll need to burn it to a DVD before you can install the software.)

Note: If you install into a Virtual Environment then get ready for very poor performace. You are better to install onto a real PC - performance is about 50 times better compared to the virtual environment.

Webcast: Exploring the Future of Web Development and Management with Internet Information Services (IIS) 7.0
Bill Staples, Product Unit Manager on the IIS team, will be hosting an upcoming TechNet Webcast titled Exploring the Future of Web Development and Management with Internet Information Services (IIS) 7.0.  Join the WebCast and see cool IIS 7.0 demos for many of the new features.

Date/Time: 6/20/2006 1:00 PM Pacific
Duration: 90 minutes
Attendee Registration URL:

FTP - Steve Schofield has written a couple of useful articles on Blind Drop & Blind Get FTP Server using IIS

Steve Schofield has written two artricles on how to setup an anonymous “blind drop” and “Blind Get“ FTP server using Microsoft Windows 2003

See these articles

You maybe wondering, what is a “blind drop” server?  A “blind drop” FTP server provides individuals or companies a method to anonymously transfer files using FTP files without having permission to list files or retrieve files on the FTP site.  In other words, you can “drop” files onto the server but not see what’s there or retrieve files if you did know what was there. There are benefits for both the end-user and FTP administrator.  The end-user doesn’t have to remember a user id and password.  The FTP administrator uses NTFS permissions so anonymous users can’t browse or retrieve files.  The biggest benefit for the FTP administrator is that they don’t have to maintain user ids and passwords for everyone needing FTP access. 

You maybe wondering, what is a “blind get” server?  A “blind get” FTP server provides a method to anonymously transfer files using FTP without having permission to list files or add files on the FTP site.  In other words, you can “get” files but not see what’s there or retrieve files unless the absolute path is known.  There are benefits for both the end-user and FTP administrator.  The end-user doesn’t have to remember a user id and password.  The FTP administrator uses NTFS permissions so anonymous users can’t browse or add files. 

A better registration script for the Atlas Framework for a production server

The following script (taken from ( and modified a bit by me ) shows how you can configure your production web sites to support the Atlas Framework.

The original registration script for the http handler only registers the script on the first site (site ID 1 - Default Web Site) where as this script will register it on all sites that do not contain it.

The original script from also had problems in that:

  1. It did not take any note as to the version of .NET runtime running on the web site!
  2. The original code could not handle an application pool with no Applications assigned to it.

I have fixed them in the following code:

Source Code

Option Explicit
Dim WMIService, ApplicationPool, ApplicationPools, Applications, index, VirtualDirectorySettings
Dim ApplicationName, ScriptMap, FoundMapping, ScriptMapCollection, LastPosition, FrameworkVersion 
Const ComputerName = "localhost"
Const ScriptMapExtension = ".asbx"
Const ScriptMapEntry = ".asbx,C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll,1,GET,HEAD,POST"
Set WMIService = GetObject("winmgmts:{authenticationLevel=pktPrivacy}\\" + ComputerName + "\root\microsoftiisv2")
Set ApplicationPools = WMIService.ExecQuery("Select * From IIsApplicationPool Where Name LIKE 'W3SVC/AppPools/%'")
For Each ApplicationPool in ApplicationPools
    WScript.Echo "Inspecting Application Pool " + ApplicationPool.Name
    ApplicationPool.EnumAppsInPool Applications
 if (UBound(Applications) > 0) then
     For index = lbound(Applications) to UBound(Applications)
      ApplicationName = CleanApplicationName(Applications(index))
   WScript.echo "Inspecting " +ApplicationName
         Set VirtualDirectorySettings = GetObject( "IIS://" + ComputerName + "/" + ApplicationName)
      If Err.number = 0 Then 
          ScriptMapCollection = VirtualDirectorySettings.ScriptMaps 
          FoundMapping = False
    FrameworkVersion  = False
       For Each ScriptMap in ScriptMapCollection      
     if (instr(ScriptMap, "v2.0.50727") <> -1) then FrameworkVersion = true
              If LCase(Left(ScriptMap, Len(ScriptMapExtension))) = ScriptMapExtension then 
                  WScript.Echo ApplicationName + " - Updating (Previous: " + ScriptMap + ")"
               ScriptMap = ScriptMapEntry
            FoundMapping = True
         Exit For
                 End IF
    If FoundMapping = False and (FrameworkVersion = true) Then
     WScript.Echo "Did not find mapping in " + ApplicationName
     LastPosition = UBound(ScriptMapCollection) + 1
     Redim Preserve ScriptMapCollection(LastPosition)
     WScript.Echo ApplicationName + " - Adding " + ScriptMapExtension
     ScriptMapCollection(LastPosition) = ScriptMapEntry
    End If
    VirtualDirectorySettings.ScriptMaps = ScriptMapCollection
          WScript.Echo ApplicationName & " - Unable to locate application virtual directory."
         End If
 end if
' Trims the leading /LM/ and trailing /
Function CleanApplicationName(applicationName)
    Dim ReturnValue
    If Len(applicationName) < 5 Then
        WScript.Echo "applicationName should be greater than 5 characters: " + applicationName
        Exit Function
    End If
    ReturnValue = Mid(applicationName, 5)
    ReturnValue = Mid(ReturnValue, 1, Len(ReturnValue) - 1)
    CleanApplicationName = ReturnValue
End Function

For more sample code like this visit :

SBS 2003 - Upgraded to SQL 2005 and now I am seeing Timeouts connecting from web sites to SQL

I am running SBS2003 at home and as part of this I am running the following on the server:

  • Microsoft Windows 2003 Server SP1
  • Microsoft Active Directory
  • Microsoft Exchange Server 2003
  • Microsoft SQL Server 2000 (recently upgraded to Microsoft SQL Server 2005)
  • Sophos Antivirus
  • Microsoft IIS 6.0 with 12 sites

Ever since I have upgraded the SQL server from 2000 to 2005 I have noticed that in this blog I am getting error messages saying Timeout when connecting to the SQL server.

I am not suprised since the machine only has 1 GB of Ram and Exchange will consume as much as it can.

But I never had this problems before - I never got a timeout until SQL was upgraded to SQL 2005.

If I free memory on the server then the web site works again...

I am not sure if SQL 2005 just wants more RAM than 2000 but it is looking like that.

I am in a bit of a situation since the server is running in as much memory as the box will take - no point upgrading until I can justify a super powerful box running Windows 2003 Server R2 with Microsoft Virtual Server 2005.

So just a note to people thinking of upgrading to SQL 2005 - you may need more RAM....

Mix 06 - All 52 sessions are online and free!
Back a few months ago Microsoft went to Las Vegas to put on a share called Mix06. If you do business on the Web today, it's likely that more than 90% of your customers reach you via Microsoft® Internet Explorer and/or Microsoft Windows®. Come to MIX and learn how the next versions of these products, due later this year, are going to dramatically improve your customers' experience. Explore a wide range of new Web technologies that Microsoft is delivering to help you unlock new revenue opportunities and lower development costs. Learn about the future of Internet Explorer and join us in a discussion about how we can build the ideal Web surfing platform to meet your needs and those of your customers.
  • Be the first to get the latest preview build of IE7
  • Work with the members of the Internet Explorer team in the Compatibility Lab to get your site ready for IE7
  • Test drive "Atlas," Microsoft's powerful new framework for building cross–browser, cross–platform AJAX applications
  • Explore Windows Live!, Microsoft's new consumer services strategy
  • Learn how to deliver revolutionary, media–rich Web content with the new Windows Presentation Foundation
  • Find out how to extend your content, media and services into the living room with Windows Media Center and Xbox 360™
  • More than 50 separate sessions and discussions for Web developers, designers and business professionals

All 52 sessions are now online and free

IIS 7 - Extensibility - How to extend the IIS system to add copyright to image requests and more

A new article up on has been published that shows just how far you can configure the new IIS 7 web server. The article is all about Extensibility, and is an end-to-end example of how to extend the IIS 7 web server with a custom request handler. It will show how to add API and command-line support for the configuration of this handler and how to write a User interface module that can plug into the IIS Management Interface.

Feature Set:

  • Managed handler inserts a copyright message into image files that are requested
  • Copyright message feature is configuration driven and uses the new IIS7 configuration system 
  • Configuration can be schematized and made accessible to configuration API’s, WMI scripting and IIS command-line tools 
  • User Interface Extension Module allows configuration of copyright message feature through the IIS7 User Interface

Wow this is really a full article on how to extend IIS...

The article is quite long in fact it is over 12 on so the print preview option is a better way to view and follow the article


2007 Microsoft Office system – free elearning courses

With the launch last week of Beta 2 of the 2007 Office system, Microsoft has made available a wide array of end user elearning courses at

The courses are divided across three key audiences, namely home and office users, IT professionals and developers, as per the details below.

Home and Office users

  • Introduction to the New Microsoft® User Interface
  • What’s New in Microsoft® Office Access 2007
  • What’s New in Microsoft® Office InfoPath® 2007
  • What’s New in Microsoft® Office Outlook® 2007
  • What’s New in Microsoft® Office PowerPoint® 2007
  • What’s New in Microsoft® Office Word 2007
  • What’s New in Microsoft® Office OneNote® 2007
  • What’s New in Microsoft® Office Visio® 2007
  • What’s New in Microsoft® Office Excel® 2007
  • What’s New in Microsoft® Office Groove 2007


  • Inside Look at Building and Developing Solutions with Microsoft® Office SharePoint Servers 2007
  • Inside Look at Developing with Microsoft® Windows SharePoint Services 3.0

IT Professionals

  • Getting Started with Microsoft® Office SharePoint Server 2007 (Beta)
  • Getting Started with Microsoft® Office SharePoint Server 2007 (Beta) e-Hands-on-Lab
  • Introduction to Windows SharePoint Services 3.0 Virtual Lab
  • Implementing and Administering Windows SharePoint Services 3.0 Virtual Lab
  • Getting Started with the 2007 Microsoft® Office System (Beta)
  • Getting Started with the 2007 Microsoft® Office System (Beta) e-Hands-on Lab
  • Benefits of Deploying the 2007 Office System Virtual Lab
  • Overview of the 2007 Microsoft® Office System Components Virtual Lab
  • Getting Started with Windows SharePoint Services 3.0 (Beta)
  • Getting Started with Windows SharePoint Services 3.0 (Beta) e-Hands-on Lab
  • Office SharePoint Server 2007 Functional and Architectural Overview Virtual Lab
  • Enterprise Content Management with Office SharePoint Server 2007 Virtual Lab
  • Organizing and Finding Resources with Office SharePoint Server 2007 Virtual Lab
  • Business Solutions Using Office SharePoint Server 2007 Virtual Lab
  • Deploying Microsoft® Windows Vista and the 2007 Office System Client Products (Beta)

More details and the courses are available at

C# - How to display MimeMap entries to the console from an instance of IIS

 The following c# application will return all of the MimeMaps defined in an IIS instance. The MimeMaps hold the mime types that IIS uses to return the ContentType header.

An example of such a header is application/octetstream

This example requires a reference to the Active DS IIS Namespace Provider in Visual Studio .NET. This reference enables you to use the IISOle namespace to access the IISMimeType class.

using System;
using System.Collections.Generic;
using System.Text;
using System.Collections.Specialized;
using System.DirectoryServices;
using System.Collections;
namespace IISMIMEType
    class Program
        static void Main(string[] args)
            // Maintain a sorted list to contain the MIME Types
            SortedList sl = new SortedList();
            Console.WriteLine("IIS Mime Map - c#");
            // Serve to connect to...
            string ServerName = "LocalHost";
            // Define the path to the metabase
            string MetabasePath = "IIS://" + ServerName + "/MimeMap";
            // Note: This could also be something like
            // string MetabasePath = "IIS://" + ServerName + "/w3svc/1/root";
                // Talk to the IIS Metabase to read the MimeMap Metabase key
                DirectoryEntry MimeMap = new DirectoryEntry(MetabasePath);
                // Get the Mime Types as a collection
                PropertyValueCollection pvc = MimeMap.Properties["MimeMap"];
                // Add each Mime Type so we can display it sorted later
                foreach (object Value in pvc)
                    // Convert to an IISOle.MimeMap - Requires a connection to IISOle
                    // IISOle can be added to the references section in VS.NET by selecting
                    // Add Reference, selecting the COM Tab, and then finding the 
                    // Active DS Namespace provider
                    IISOle.MimeMap mimetypeObj = (IISOle.MimeMap)Value;
                    // Add the mime extension and type to our sorted list.
                    sl.Add(mimetypeObj.Extension, mimetypeObj.MimeType);
                // Render the sorted MIME entries
                if (sl.Count == 0)
                    Console.WriteLine("No MimeMap entries are defined at {0}!", MetabasePath);
                    foreach (string Key in sl.Keys)
                        Console.WriteLine("{0} : {1}", Key.PadRight(20), sl[Key]);
            catch (Exception ex)
                if ("HRESULT 0x80005006" == ex.Message)
                    Console.WriteLine(" Property MimeMap does not exist at {0}", MetabasePath);
                    Console.WriteLine("An exception has occurred: \n{0}", ex.Message);

Example Output

.*  application/octet-stream
.323  text/h323
.acx  application/internet-property-stream
.ai  application/postscript
.aif  audio/x-aiff
.aifc  audio/aiff
.aiff  audio/aiff
.application  application/x-ms-application
.asf  video/x-ms-asf
.asr  video/x-ms-asf
.asx  video/x-ms-asf
.au  audio/basic
.avi  video/x-msvideo
.axs  application/olescript
.bas  text/plain
.bcpio  application/x-bcpio
.bin  application/octet-stream
.bmp  image/bmp
.c  text/plain
.cat  application/vndms-pkiseccat
.cdf  application/x-cdf
.cer  application/x-x509-ca-cert
.clp  application/x-msclip
.cmx  image/x-cmx
.cod  image/cis-cod
.cpio  application/x-cpio
.crd  application/x-mscardfile
.crl  application/pkix-crl
.crt  application/x-x509-ca-cert
.csh  application/x-csh
.css  text/css
.dcr  application/x-director
.deploy  application/octet-stream
.der  application/x-x509-ca-cert
.dib  image/bmp
.dir  application/x-director
.disco  text/xml
.dll  application/x-msdownload
.doc  application/msword
.dot  application/msword
.dvi  application/x-dvi
.dxr  application/x-director
.eml  message/rfc822
.eps  application/postscript
.etx  text/x-setext
.evy  application/envoy
.exe  application/octet-stream
.fif  application/fractals
.flr  x-world/x-vrml
.gif  image/gif
.gtar  application/x-gtar
.gz  application/x-gzip
.h  text/plain
.hdf  application/x-hdf
.hlp  application/winhlp
.hqx  application/mac-binhex40
.hta  application/hta
.htc  text/x-component
.htm  text/html
.html  text/html
.htt  text/webviewhtml
.ico  image/x-icon
.ief  image/ief
.iii  application/x-iphone
.ins  application/x-internet-signup
.isp  application/x-internet-signup
.IVF  video/x-ivf
.jfif  image/pjpeg
.jpe  image/jpeg
.jpeg  image/jpeg
.jpg  image/jpeg
.js  application/x-javascript
.latex  application/x-latex
.lsf  video/x-la-asf
.lsx  video/x-la-asf
.m13  application/x-msmediaview
.m14  application/x-msmediaview
.m1v  video/mpeg
.m3u  audio/x-mpegurl
.man  application/x-troff-man
.manifest  application/x-ms-manifest
.mdb  application/x-msaccess
.me  application/x-troff-me
.mht  message/rfc822
.mhtml  message/rfc822
.mid  audio/mid
.mmf  application/x-smaf
.mny  application/x-msmoney
.mov  video/quicktime
.movie  video/x-sgi-movie
.mp2  video/mpeg
.mp3  audio/mpeg
.mpa  video/mpeg
.mpe  video/mpeg
.mpeg  video/mpeg
.mpg  video/mpeg
.mpp  application/
.mpv2  video/mpeg
.ms  application/x-troff-ms
.mvb  application/x-msmediaview
.nc  application/x-netcdf
.nws  message/rfc822
.oda  application/oda
.ods  application/oleobject
.p10  application/pkcs10
.p12  application/x-pkcs12
.p7b  application/x-pkcs7-certificates
.p7c  application/pkcs7-mime
.p7m  application/pkcs7-mime
.p7r  application/x-pkcs7-certreqresp
.p7s  application/pkcs7-signature
.pbm  image/x-portable-bitmap
.pdf  application/pdf
.pfx  application/x-pkcs12
.pgm  image/x-portable-graymap
.pko  application/vndms-pkipko
.pma  application/x-perfmon
.pmc  application/x-perfmon
.pml  application/x-perfmon
.pmr  application/x-perfmon
.pmw  application/x-perfmon
.png  image/png
.pnm  image/x-portable-anymap
.pnz  image/png
.pot  application/
.ppm  image/x-portable-pixmap
.pps  application/
.ppt  application/
.prf  application/pics-rules
.ps  application/postscript
.pub  application/x-mspublisher
.qt  video/quicktime
.ra  audio/x-pn-realaudio
.ram  audio/x-pn-realaudio
.ras  image/x-cmu-raster
.rgb  image/x-rgb
.rmi  audio/mid
.roff  application/x-troff
.rtf  application/rtf
.rtx  text/richtext
.scd  application/x-msschedule
.sct  text/scriptlet
.setpay  application/set-payment-initiation
.setreg  application/set-registration-initiation
.sh  application/x-sh
.shar  application/x-shar
.sit  application/x-stuffit
.smd  audio/x-smd
.smx  audio/x-smd
.smz  audio/x-smd
.snd  audio/basic
.spc  application/x-pkcs7-certificates
.spl  application/futuresplash
.src  application/x-wais-source
.sst  application/vndms-pkicertstore
.stl  application/vndms-pkistl
.stm  text/html
.sv4cpio  application/x-sv4cpio
.sv4crc  application/x-sv4crc
.t  application/x-troff
.tar  application/x-tar
.tcl  application/x-tcl
.tex  application/x-tex
.texi  application/x-texinfo
.texinfo  application/x-texinfo
.tgz  application/x-compressed
.tif  image/tiff
.tiff  image/tiff
.tr  application/x-troff
.trm  application/x-msterminal
.tsv  text/tab-separated-values
.txt  text/plain
.uls  text/iuls
.ustar  application/x-ustar
.vcf  text/x-vcard
.wav  audio/wav
.wbmp  image/vnd.wap.wbmp
.wcm  application/
.wdb  application/
.wks  application/
.wmf  application/x-msmetafile
.wps  application/
.wri  application/x-mswrite
.wrl  x-world/x-vrml
.wrz  x-world/x-vrml
.wsdl  text/xml
.xaf  x-world/x-vrml
.xbm  image/x-xbitmap
.xla  application/
.xlc  application/
.xlm  application/
.xls  application/
.xlt  application/
.xlw  application/
.xml  text/xml
.xof  x-world/x-vrml
.xpm  image/x-xpixmap
.xsd  text/xml
.xsl  text/xml
.xwd  image/x-xwindowdump
.z  application/x-compress
.zip  application/x-zip-compressed

For more details on MimeMaps see:

For more details on using System.DirectoryServices to configure IIS see:

Windows XP IIS Manager v1.7 aka Easy IIS

Windows XP IIS Manager v1.7 aka EasyIIS

I keep forgetting to blog about this tool which is up on - this tool includes source in C++ and the binary files as well.

Why do you want it?

Well basically IIS on Windows 2000 Professional or Windows XP Professional will only allow you to create one web site. This can be a problem when developing code for multiple web sites (not such an issue with ASP.NET v2 with the build in Development Web Server but still an issue).

So IIS will only allow the Default Web Site via the UI, but you have always been able to create new web sites using ADSI or WMI so why do you need it?

Simple - it makes life easy...


Like most of the limitation in IIS on Windows XP you can't get get around them. Althgouh you can create multuple sites you can only have one of them active at a time. This means that you can still only really work on the one project at once.

Also there may be issues with the creation of Application Root's based on some of the comments but in general a very useful tool.

You can download this tool and its source code from

C# - How to display almost all properties for all IIS Virtual Web Servers

Source Code

Note: You will need to add a reference to System.DirectoryServices if you are using

using System;
using System.DirectoryServices;
namespace IISSample
    static class Program
        /// The main entry point for the application.
        static void Main()
            const string WebServerSchema = "IIsWebServer"; // Case Sensitive
            string ServerName = "LocalHost";
            DirectoryEntry W3SVC = new DirectoryEntry("IIS://" + ServerName + "/w3svc");
            foreach (DirectoryEntry Site in W3SVC.Children)
                if (Site.SchemaClassName == WebServerSchema)
                    Console.WriteLine("WebSite Instance ID : " +Site.Name);
                    foreach (string PropertyName in Site.Properties.PropertyNames)
                        PropertyValueCollection pvc = Site.Properties[PropertyName];
                        foreach(object Value in pvc)
                            Console.WriteLine("  " + Value.ToString());
                Console.WriteLine("".PadRight(80, '-'));

Example Output:

  Default Web Site
  An error occurred on the server when processing the URL.  Please contact the system administrator.
  %windir%\system32\inetsrv\ASP Compiled Templates
  X-Powered-By: ASP.NET

You can also do this for all of the IIS Classes such as:

IIsCertMapper Maps certificates to Windows accounts.
IIsCompressionSchemes Global settings for HTTP 1.1 compression schemes.
IIsCompressionScheme Settings for individual compression schemes.
IIsComputer Establishes global settings for IIS configuration.
IIsCustomLogModule Sets properties for custom logging information field nodes.
IIsFilter Provides information about a specific filter.
IIsFilters Manages filters.
IIsFtpInfo Establishes configuration properties for FTP servers in addition to those set at IIsFtpService.
IIsFtpServer Establishes configuration properties for a single FTP server.
IIsFtpService Establishes configuration properties common to all FTP servers.
IIsFtpVirtualDir Sets properties for an individual FTP virtual directory.
IIsIPSecurity A custom ADSI object you can use to set access permissions by IP address and domain address.
IIsLogModule Contains information about a specific logging module.
IIsLogModules Maintains information about installed logging modules.
IIsMimeMap Manages Multipurpose Internet Mail Extension (MIME) mappings.
IIsMimeType Used to manipulate the list of valid MIME types.
IIsWebDirectory Sets properties for an individual Web directory.
IIsWebFile Sets properties for an individual Web file.
IIsWebInfo Establishes configuration properties for Web servers in addition to those set at IIsWebService.
IIsWebServer Establishes configuration properties for a single Web server.
IIsWebService Establishes configuration properties common to all Web servers.
IIsWebVirtualDir Sets properties for an individual Web virtual directory.

Note: Note all classes are available at all levels in the IIS Metabase Hierarchy - so you can not for example get an IIsVirtualDirectory at the same level as the IIsWebServer because it is a child element of an IIsWebServer

For more details see the following references