Wednesday, December 06, 2006

Setup web application on Windows 2003

Windows 2003 come with NET 1.1 preinstalled. However, ASP.NET web extension may be not installed by default. It is depends on checkbox ASP.NET in the "Windows Components" of the Add/Remove Programs.
Well, I can ask user to prepare the system, before install my web application.
However, I get clear right now, it doesn't help to me. Because it is ASP.NET 1.1 and nothing more. So, I leave user without stupid requirements and do following.

My setup installs .NET 2
My setup registers ASP.NET 2 through aspnet_regiis.exe
But ASP.NET web extension appears in the IIS settings as prohibited
Ok, another day for search/trying/insomnia and my C# application running from the setup, will do things right:

// if windows 2003
if (Environment.OSVersion.Version.Major == 5 &&
Environment.OSVersion.Version.Minor == 2)
{
DirectoryEntry folderRoot = new DirectoryEntry("IIS://localhost/W3SVC");
folderRoot.Invoke("EnableWebServiceExtension", "ASP.NET v2.0.50727");
}

Bingo!
User installs my web application setup, and doesn't complain. :)

I found also other usefull methods:
-----------
If we want to check, is ASP.NET installed at all
we should use ListWebServiceExtensions and search for ASP.NET in the returned list of extensions.
System.Array installedObj = (System.Array)folderRoot.Invoke("ListWebServiceExtensions", null);

-----------
Also we can check, is web extension restricted or not. If ASP.NET is restricted, then property WebSvcExtRestrictionList will return list containing ASP.NET:
System.Array restrictedObj = (System.Array)folderRoot.Properties["WebSvcExtRestrictionList"].Value;

2 comments:

Anonymous said...

Thanks for posting this... I have struggled for weeks trying to find a programmatic way to accomplish this.

You rock!

The Last Don said...

Very glad to help.