明輝手游網(wǎng)中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

用DELPHI寫注冊表完成創(chuàng)建IIS虛擬目錄

[摘要][原創(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)試通過。