用DELPHI寫注冊表完成創(chuàng)建IIS虛擬目錄
發(fā)表時間:2024-02-12 來源:明輝站整理相關軟件相關文章人氣:
[摘要][原創(chuàng)] 計世商情網(wǎng) 徐輝 最近筆者在制作一安裝程序時遇到需動態(tài)建立虛擬目錄的問題,通過在網(wǎng)上查找相關資料,發(fā)現(xiàn)有很多關于用DELPHI來建立IIS的虛擬目錄的例子,但都是需要加載類庫,不容量調(diào)試,且對類庫知識的掌握程度要求較高 。筆者就是幾次調(diào)試都沒通過(能力有限,知識有限...
[原創(chuàng)] 計世商情網(wǎng) 徐輝
最近筆者在制作一安裝程序時遇到需動態(tài)建立虛擬目錄的問題,通過在網(wǎng)上查找相關資料,發(fā)現(xiàn)有很多關于用DELPHI來建立IIS的虛擬目錄的例子,但都是需要加載類庫,不容量調(diào)試,且對類庫知識的掌握程度要求較高
。筆者就是幾次調(diào)試都沒通過(能力有限,知識有限呀:-(),自古通向羅馬就不止一條道。通過對注冊表的研究,終于讓我發(fā)現(xiàn)了IIS在注冊表中的老巢,通過N次研究(N<3)終于弄清動態(tài)建立虛擬目錄的方法。筆者所采用的是通過寫注冊表的方式來實現(xiàn),方法簡單,不需要加入類的復雜過程,唯一的不同是需要重啟電腦后才能生效,F(xiàn)將代碼公布如下,希望對能對此有興趣的朋友們有所幫助,代碼如下:
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
//找到或創(chuàng)建\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//創(chuàng)建鍵值失敗
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中調(diào)試通過。