把在找到正確方法前遇到的挫折也拿出來與大家分享,相信不少朋友從iis6到iis7的過渡中也和我存在同樣的疑問,開始的時候我需要在IIS7下創建虛擬目錄,用的是DirecotryEntry這個類,怎么也不能,總會報錯[System.Runtime.InteropServices.COMException]{"未知錯誤(0x80005000)"}這個錯誤。

第一步:找機子上安全方面的問題。我IIS7是裝在Windowsserver2008上的。我取消了系統的UAC。并用“以管理員身份”運行的該程序。結果還是不行。
第二步:在網上找有沒有人跟我碰到相同的問題。果然!很多人都有,網上給的解決方案是:
TheIISMetabaseandIIS6ConfigurationCompatibilityisnotautomaticallyinstalledwhenyouenabletheWebServerroleinWindows2008Server.Ifyouenablethisfeature,youroldDirectoryServicescodein.NETshouldworklikeitusedto.
需要安裝IIS6Metabase兼容性組件
用了這種方案果然成功了!但事情并沒有結束。
第三步:找原因,為什么IIS7不能用這種方法!
功夫不負有心人!
IIS7是沒有元數據的。哎~~這就是根本原因,大家可以到C:/WINDOWS/system32/inetsrv這個目錄看看,IIS6的和IIS7的文件不同的。
所以后來找到這種方法:
請注意本文的內容均基于WindowsVistaBeta2版本,在正式的發布版本中可能會有所改變。
Microsoft中提供了管理IIS7的一些非常強大的API——Microsoft.Web.Administration,可以很方便的讓我們以編程的方式管理,設定IIS7的各項配置。Microsoft.Web.Administration.dll位于IIS的目錄(%WinDir%/System32/InetSrv)下,在項目中添加對其的引用后您就可以使用這些API了。下圖顯示了Microsoft.Web.Administration.dll中的主要對象。

讓我們通過幾個例子來使用Microsoft.Web.Administration,下面的例子均非常易懂,我就不再過多解釋了。
1、建立一個站點(Site)
ServerManageriisManager=newServerManager();
iisManager.Sites.Add("NewSite","http","*:8080:","d://MySite");
iisManager.Update();
2、將一個應用程序(Application)添加到一個站點
ServerManageriisManager=newServerManager();
iisManager.Sites["NewSite"].Applications.Add("/Sales","d://MyApp");
iisManager.Update();
3、建立一個虛擬目錄(VirtualDirectory)
ServerManageriisManager=newServerManager();
Applicationapp=iisManager.Sites["NewSite"].Applications["/Sales"];
app.VirtualDirectories.Add("/VDir","d://MyVDir");
iisManager.Update();
4、運行時控制:停止一個站點
ServerManageriisManager=newServerManager();
iisManager.Sites["NewSite"].Stop();
5、運行時控制:回收應用程序池(RecycilinganApplicationPool)
ServerManageriisManager=newServerManager();
iisManager.ApplicationPools["DefaultAppPool"].Recycle();
6、運行時控制:得到當前正在處理的請求
ServerManageriisManager=newServerManager();
foreach(WorkerProcessw3wpiniisManager.WorkerProcesses){
Console.WriteLine("W3WP({0})",w3wp.ProcessId);
foreach(Requestrequestinw3wp.GetRequests(0)){
Console.WriteLine("{0}-{1},{2},{3}",
request.Url,
request.ClientIPAddr,
request.TimeElapsed,
request.TimeInState);
}
}
還有一個有用之處是Microsoft.Web.Administration提供了對*.config(例如web.config)文件的編輯功能,讓您再也不用像修改普通XML文件一樣修改*.config了。