直接用 VC++ 操作 IIS 元件 (ADSI/COM) 程式碼冗長複雜。靈感來自 VBScript 管理 IIS 極簡短,決定採用VC++ 載入 ScriptControl → 執行 VBScript 方案,幾乎同一套架構可控制所有 IIS 屬性。
void CTestDlg::OnBnClickedOk()
{
// 1. 定義 VBScript 函數字串:修改指定網站的主目錄路徑
char szScript[] =
"Function ChangeWebPath(computer, webname, path) "
" On Error Resume Next "
" Dim vRoot, websvc, site "
" ChangeWebPath = -1 "
" Set websvc = GetObject(\"IIS://\" & computer & \"/W3svc\") "
" If Err <> 0 Then Exit Function "
" For Each site In websvc "
" If site.Class = \"IISWebServer\" Then "
" If site.ServerComment = webname Then "
" Set vRoot = site.GetObject(\"IISWebVirtualDir\", \"Root\") "
" vRoot.Path = path "
" vRoot.SetInfo "
" ChangeWebPath = 0 "
" Exit Function "
" End If "
" End If "
" Next "
"End Function ";
// 2. 呼叫腳本
CString strScript = szScript;
strScript += _T("z5 = ChangeWebPath(\"127.0.0.1\", \"預設網站\", \"C:\\\\Inetpub\\\\wwwroot\")");
// 3. 執行
m_ScriptControl.put_Language(_T("VBScript"));
m_ScriptControl.AddCode(strScript);
VARIANT result = m_ScriptControl.Eval(_T("z5"));
if (result.iVal == 0)
AfxMessageBox(_T("修改成功"));
else
AfxMessageBox(_T("修改失敗"));
}
m_ScriptControl (ID: IDC_SCRIPTCTRL)。AddCode。On Error Resume Next + 回傳值判斷;VC++ 端檢查 VARIANT 結果。參考 C:\Inetpub\AdminScripts\*.vbs 官方範例,只需修改 VBScript 函數內容:
AuthAnonymous、AuthFlags 屬性。DefaultDoc。Create/Delete 方法。IIS://.../W3SVC/AppPools。| 優點 | 缺點 |
|---|---|
| 程式碼極簡短,維護容易 | 需目標機安裝 ScriptControl (通常預裝) |
| 同一 VC++ 架構複用所有 IIS 管理功能 | 效能較直接 COM 呼叫稍低 (管理操作可忽略) |
| VBScript 範例豐富,直接移植即用 | 除錯較難 (建議先在 .vbs 檔測試再嵌入) |
「寫腳本、VC 執行」是操作 IIS/ADSI/COM 等複雜系統管理介面的極佳模式。將業務邏輯封裝在 VBScript,VC++ 僅負責載入執行與參數傳遞,實現關注點分離,大幅降低開發與維護成本。