If you're stuck with a situation that requires running Drupal on Windows/IIS/MySQL/PHP (WIMP - an appropriate acronym, huh?), these tips might help.
We had already purchased a product that provides mod_rewrite like functionality for using clean urls on IIS for our main site. Here is the config that we're using to enable it. I also had to go directly into the database to change to clean_url value to s:1:"1"; as I couldn't change it in the default admin section (and didn't take time to investigate what the code was doing), but it seems to work pretty well. If you get a chance, please let me know if there are any gaps and/or the potential for unintended consequences.
# Block external access to the httpd.ini and httpd.parse.errors files
RewriteRule /httpd(?:\.ini|\.parse\.errors).* / [F,I,O]
# Block external access to the Helper ISAPI Extension
RewriteRule .*\.isrwhlp / [F,I,O]
# Rewrite protolive to fully qualified url
RewriteCond Host: connect
RewriteRule (.*) http\://connect.educause.edu$1 [I,R]
# Accept a url with a period and pass it through unchanged.
#RewriteRule (.*\..*) $1 [I,L]
# Accept a url with .css and pass it through unchanged.
RewriteRule (.*.css) $1 [I,L]
# Accept a url with .js and pass it through unchanged.
RewriteRule (.*.js) $1 [I,L]
RewriteRule /index.php.* $0 [I,L]
RewriteRule /(.*)\?(.*) /index.php\?q=$1&$2 [I,L]
RewriteRule /(.*) /index.php\?q=$1 [I,L]
Here is some preliminary code that I'm using to execute the cron script. I just sheduled it to run on a periodic basis. As with the info above, please let me know if there are key gaps that my catch me.
ret_value = checkpage("http://connect.educause.edu/cron.php")
Set objFSO = createobject("scripting.filesystemobject")
Set objStream = objFSO.CreateTextFile("c:\inetpub\wwwroot\custom\hit_cron.log", True)
set objFSO = nothing
set objStream = nothing
Set xmlhttp = CreateObject("Msxml2.SERVERXMLHTTP")
xmlhttp.Open "GET", url, false
xmlhttp.setRequestHeader "Pragma", "no-cache"
xmlhttp.setRequestHeader "Cache-Control", "no-cache"
on error resume next
'Wait for up to 30 seconds if we've not gotten the data yet
If xmlhttp.readyState <> 4 then
on error resume next
If (xmlhttp.readyState <> 4) Then
checkPage = "TIMEOUT"
checkPage = xmlhttp.status
checkPage = checkPage & " - " & xmlhttp.statusText & " - " & now()
set xmlhttp = Nothing