通過(guò)ADSI管理 Internet Information Server
作者:佚名 時(shí)間:2012-04-13 分享到:
下面以利用ADSI管理IIS Web 服務(wù)器為例子,說(shuō)明活動(dòng)目錄的使用。
在Visual Basic中使用ADSI,必須添加對(duì)Active DS Type Library(activeds.tlb)的引用。
在Visual C++中使用ADSI,需要#include activeds.h,連接activeds.lib和adsiid.lib庫(kù)文件,并要使用Unicode字符串。
下面一個(gè)例子是使用VB創(chuàng)建一個(gè)Web站點(diǎn)的示例。多站點(diǎn)只能在NT Server上面創(chuàng)建,NT工作站或者Win2k Profession不支持創(chuàng)建多站點(diǎn)。
'============================
' CreateWebSit 參數(shù)說(shuō)明
' WWWSiteName 要建立的新站點(diǎn)的描述(也可以教名字)
' WWWTCPPort 要新站點(diǎn)的TCP端口
' WWWFilesPath 新站點(diǎn)的主目錄路徑
' ComputerName 需要在那臺(tái)機(jī)器上建立虛擬站點(diǎn),本機(jī)可以使用localhost
'===========================
Function CreateWebSit(ByVal WWWSiteName As String, _
ByVal WWWTCPPort As String, _
ByVal WWWFilesPath As String, _
ByVal ComputerName As String) As Boolean
CreateWebSit = True
Dim TCPPort() As Variant
'建立活動(dòng)桌面'(IADS)對(duì)象。首先要在 VB 中的 'prject'菜單中的'references'中引'用 Active DS 'Type 'library 組件
Dim WWWServer As IADs, WWWService As IADs, WWWVdir, WWWVdirRes As IADs
Dim I As Integer
Dim HandleSameCase As Boolean
'取得W3SVC服務(wù)
Set WWWService = GetObject("IIS://" & ComputerName & "/W3SVC")
I = 1
HandleSameCase = True
On Error GoTo ErrWouldDo
'在IIS中查找每一個(gè)WEB站點(diǎn)
For Each WWWServer In WWWService
Set WWWServer = Nothing
Set WWWServer = GetObject("IIS://" & ComputerName & "/W3SVC/" & I)
Debug.Print WWWServer.ServerComment
'如果在安裝時(shí)系統(tǒng)中已經(jīng)有了要加的站點(diǎn),則要先刪除干凈
If UCase(WWWServer.ServerComment) = UCase(WWWSiteName) Then
WWWService.Delete "IISWebServer", I '再刪除
Exit For
End If
ReDim TCPPort(1)
TCPPort(0) = ""
TCPPort = WWWServer.Serverbindings
'如果端口已經(jīng)有了則也要先刪除
If TCPPort(0) = ":" & WWWTCPPort & ":" Then
WWWService.Delete "IISWebServer", I '刪除
Else
I = I + 1
End If
Next
HandleSameCase = False
CreateSite:
'MsgBox I
Set WWWServer = WWWService.Create("IISWebServer", I) '創(chuàng)建新站點(diǎn)
WWWServer.ServerComment = WWWSiteName '設(shè)置站點(diǎn)名
WWWServer.Serverbindings = ":" & WWWTCPPort & ":" '設(shè)置端口號(hào)
WWWServer.DefaultDoc = "default.asp,index.asp,default.htm,index.htm" '設(shè)置默認(rèn)啟動(dòng)文件
WWWServer.AccessScript = True '設(shè)置權(quán)限
WWWServer.AccessRead = True
WWWServer.SetInfo
'創(chuàng)建設(shè)置主目錄
Set WWWServer = GetObject("IIS://" & ComputerName & "/W3SVC/" & I)
Set WWWVdir = WWWServer.Create("IISWebVirtualDir", "root")
WWWVdir.Path = WWWFilesPath '主目錄的實(shí)際磁盤(pán)路徑
WWWVdir.SetInfo
WWWVdir.AppCreate True
WWWServer.Start '啟動(dòng)新站點(diǎn)
Set WWWVdirRes = WWWVdir.Create("IISWebVirtualDir", "Resource") '創(chuàng)建虛擬目錄
WWWVdirRes.Path = WWWFilesPath + "\Resource"
WWWVdirRes.AccessRead = True
WWWVdirRes.AccessWrite = True
WWWVdirRes.SetInfo
'下面為自定義IIS Web Server的錯(cuò)誤信息,等發(fā)生404錯(cuò)誤時(shí)候指定調(diào)用網(wǎng)站主目錄下的404.htm頁(yè)面顯示
WWWServer.HttpErrors = "404,0,FILE," + WWWFilesPath + "\404.htm"
WWWServer.SetInfo
CreateWebSit = True
Exit Function
ErrWouldDo:
'MsgBox Err.Description
If (HandleSameCase = True) Then
GoTo CreateSite
Else
MsgBox Err.Description
CreateWebSit = False
Exit Function
End If
End Function
例如要在本機(jī)上使用9000端口創(chuàng)建一個(gè)名字(描述)為MySite的站點(diǎn),并且把C:\C:\MyWebRoot設(shè)定為網(wǎng)站的主目錄,可以這樣調(diào)用:
CreateWebSit "MySite", "9000", "C:\MyWebRoot", "localhost"
上面這個(gè)VB的例子,說(shuō)明了在VB中使用ADSI的基本步驟與屬性(屬性的數(shù)據(jù)類(lèi)型包括了String,List,Boolean的設(shè)置)。關(guān)于更多的IIS的屬性,請(qǐng)參考MSDN ADSI專(zhuān)題(建議使用新版本的MSDN,其實(shí)我的也不新--2000 oct版)
下面的一個(gè)VC中使用ADSI的例子,其步驟與VB相差不遠(yuǎn),這個(gè)例子是使用VC在默認(rèn)Web站點(diǎn)建立的虛擬目錄。
///////////////////////////////////////////////
// CreateVirtualDirection參數(shù)說(shuō)明
// lpszVirtualDirName需要建立的虛擬目錄的目錄名字
// lpszDiskPath 需要建立虛擬目錄的本地磁盤(pán)目錄
//////////////////////////////////////////////
BOOL CreateVirtualDirection(LPCTSTR lpszVirtualDirName,LPCTSTR lpszDiskPath)
{
IADsContainer* iContainer;
IADs* iAds;
/* 獲得WebSever */
if(ADsGetObject(L"IIS://localhost/w3svc",IID_IADsContainer,(void**)&iContainer)==S_OK)
{
//等到默認(rèn)站點(diǎn)
iContainer->GetObject(_bstr_t("IIsWebServer"), _bstr_t("1"),(IDispatch**)&iAds);
if(iAds->QueryInterface(IID_IADsContainer,(void**)&iContainer)==S_OK)
{
//得到默認(rèn)站點(diǎn)的根目錄
iContainer->GetObject(_bstr_t("IIsWebVirtualDir"),_bstr_t("Root"),(IDispatch**)&iAds);
//獲得訪(fǎng)問(wèn)虛擬目錄
if(iAds->QueryInterface(IID_IADsContainer,(void**)&iContainer)==S_OK)
{
//先刪除了虛擬目錄
iContainer->Delete(_bstr_t("IIsWebVirtualDir"), _bstr_t(lpszVirtualDirName));
//建立虛擬目錄
if(iContainer->Create(_bstr_t("IIsWebVirtualDir"), _bstr_t(lpszVirtualDirName),(IDispatch**)&iAds)==S_OK)
{
//設(shè)置虛擬目錄的屬性
iAds->Put(_bstr_t("AccessRead"),_variant_t("True"));//注意跟VB中的設(shè)置屬性比較
iAds->Put(_bstr_t("AccessWrite"),_variant_t("True"));
iAds->Put(_bstr_t("Path"),_variant_t(lpszDiskPath));
iAds->SetInfo();
iAds->Release();
iAds->Release();
iContainer->Release();
iContainer->Release();
return TRUE;
}
else
{
iAds->Release();
iAds->Release();
iContainer->Release();
iContainer->Release();
return FALSE;
}
}
else
{
iAds->Release();
iContainer->Release();
}
}
else
{
iAds->Release();
}
iContainer->Release();
}
return FALSE;
}