[原創] 計世商情網 徐輝 最近筆者在制作一安裝程序時遇到需動態建立虛擬目錄的問題,通過在網上查找相關資料,發現有很多關于用DELPHI來建立IIS的虛擬目錄的例子,但都是需要加載類庫,不容量調試,且對類庫知識的掌握程度要求較高 。筆者就是幾次調試都沒通過(能力有限,知識有限呀:-(),自古通向羅馬就不止一條道。通過對注冊表的研究,終于讓我發現了IIS在注冊表中的老巢,通過N次研究(N<3)終于弄清動態建立虛擬目錄的方法。筆者所采用的是通過寫注冊表的方式來實現,方法簡單,不需要加入類的復雜過程,唯一的不同是需要重啟電腦后才能生效。現將代碼公布如下,希望對能對此有興趣的朋友們有所幫助,代碼如下: procedure TForm1.Button1Click(Sender: TObject); var RegODBC:TRegistry; registerTemp : TRegistry; SysPath: array [0..255] of char; begin RegODBC:=TRegistry.create; //訪問注冊表 RegODBC.RootKey:=HKEY_LOCAL_MACHINE; RegODBC.OpenKey('\SYSTEM\ControlSet001\Services\W3SVC\Parameters\Virtual Roots',True); getsystemdirectory(SysPath,255); if regodbc.ValueExists('/fire') then begin suimessage1.Text:='本機WEB已存在名為fire的虛擬目錄。'+#13#10+'請將此fire刪除或重命名。'; suimessage1.IconType:=suistop; suimessage1.ButtonCount:=1; suimessage1.Caption:='錯誤'; if suimessage1.ShowModal=mrok then winexec(pchar(SysPath+'\inetsrv\inetmgr.exe'),sw_shownormal); exit; end else begin registerTemp := TRegistry.Create; //建立一個Registry實例 with registerTemp do begin RootKey:=HKEY_LOCAL_MACHINE;//設置根鍵值為HKEY_LOCAL_MACHINE //找到或創建\SYSTEM\ControlSet001\Services\W3SVC\Parameters\Virtual Roots,寫入IIS配置信息 if OpenKey('\SYSTEM\ControlSet001\Services\W3SVC\Parameters\Virtual Roots',True) then begin WriteString('/fire','E:\fire,,205'); end else//創建鍵值失敗 begin suimessage1.Text:='IIS配置失敗,本程序即將關閉。'+#13#10+'關閉后請先檢查Internet服務管理器,排除錯誤或安裝后再運行本程序。'; suimessage1.IconType:=suistop; suimessage1.ButtonCount:=1; suimessage1.Caption:='錯誤'; if suimessage1.ShowModal=mrok then application.Terminate ; end; CloseKey; Free; end; end; RegODBC.Free; end;
說明:代碼中用到了suipack4控件的suimessagedialog組件(起提示作用),例子的確認窗口也可通過Application.MessageBox()來替代。代碼在DELPHI6+WINDOWS2000中調試通過。
|