Background
Right now, I don't have a web server (Windows xxxx server), and as you all know, building multiple web sites on Windows XP is not very simple. Even if you have a server, you will always need a way of test something on you local computer before you upload it to the production server, and this solution may be of some use.
Windows XP IIS:
Problem 1: only one site - Microsoft has provided us with the "admin scripts", so we can create more sites, but these scripts are painful to use.
Solution: So I have decided to build a tool to take that pain go away.
Problem 2: only one site running at a time - this is not really so bad, but I didn't like to have to open "Internet Information Services" every time I have to change from one site to another.
After I completed the tool, I saw that it would be my first article. Why? Because maybe some one else has been having the same problems, and because, while I was making this tool, I realize that information on "Controlling IIS with C++" is difficult to find. So, I provide a "Ready to use tool" and the sample code.
Even knowing that .NET web programming has the bad habit of wanting the "Default Web Site" as the root for development (and if someone knows a way of doing it locally with other sites, I will be happy) , I think this tool may be useful...
Here it goes ...
The EasyIIS Tool
This tool will give you a way to create, delete, and change some properties of the existent sites. I have not implemented "all" the features of the IIS snap-in because I wanted to keep it simple. I wanted to make it as simple as possible, create a site by a few clicks. For extra features, we have always the IIS snap-in!
It will also update the HOSTS file, this way you will be able to access the sites by typing something like http://yousite rather than using http://localhost. This comes in handy to prevent problems with "temporary internet files" like CSS and JS, because you may use (like me) some global CSS files that are different for each site but have the same name.
For example: http://testsite1/global.css and http://testsite2/global.css.
If you don't use the HOSTS file to access the different sites by typing http://testsite1 and http://testsite2, you will have to access the two by typing http://localhost and therefore the file global.css will have the same URL for the two sites (http://localhost/global.css) and this may create some strange problems because the "temporary internet files" will think they are the same file.
This was annoying, so I started to manage the hosts file.
Windows XP lets you run only one site at a time, so there is an option to stop the running site before starting the new one.
Points of Interest
The points of interest will be in the "readers eyes", but for me it was the fact that I had a hard time to get information on how to do it with VC++.
You never know when you will need to create some crazy tool to access the IIS, lets say, in some Intranet for example. Imagine you have a server full of customer sites, and that you want your "tech people" to access the IIS in order to change something. I bet you will not want them to play around with all that IIS snap-in can offer, plus they would be consuming one of the (only) two precious Terminal Services Connections, or even more...
Imagine that your commercial department wants to be able to "cut" customer services for some reason. I guess you will never give them access to the servers, but you may not be always around to go to the server and stop/start a site every time they want.
So you may want to develop some kind of IIS back-office with a few options for them to access via browser... OK OK I can ear already someone saying that they can do it with .NET and that you don't need C++ for that. True, but that's not the point here, the point is that you may be like me, in love with ISAPIs, and if that's the case, every time something like this comes around we immediately think "what if... ISAPI...".
And this is the point... to point you to some code which is able to do it, if for some reason you are having a hard time guessing it up.
Granted that this is not an ISAPI, it still is in C++ and "binding" this code with an ISAPI will not be hard.
About this project, I want to say that I always stop the running site (if that option is active) prior to starting another, this is needed only in Windows XP because only one aite can be running at a time. And to start one, I have to stop the other, or the start command will fail. But the real problem appears when you delete the running site without stopping it before! You will not be able to start another site without a IISRESET or a reboot.
Warning
It has always worked for me , but I strongly suggest that you test it before you use. I did not test "every scenario"!!
History
03-03-2005 v1.7 First release.