Chinaunix首页 | 论坛 | 博客
  • 博客访问: 544680
  • 博文数量: 252
  • 博客积分: 6057
  • 博客等级: 准将
  • 技术积分: 1635
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-21 10:17
文章分类

全部博文(252)

文章存档

2013年(1)

2012年(1)

2011年(32)

2010年(212)

2009年(6)

分类:

2010-04-09 13:34:38

 本文主要描述的是如何利用Delphi对Web IIS进行控制,应该说常用的功能基本都有了。为了共用我已把它做成了一个独立的单元文件,大家可直接下载,这样我们只要直接在程序  uses uIIS就可以使用了,同时我也做了一个演示程序。
一、如何得到机 器上IIS中所有的WEB虚拟站点.
  1. function GetWebSiteList(slWebSiteList:TStrings):Integer;  
  2. var  
  3.   InstallPath: String;  
  4.   WebSite, WebServer, WebRoot: Variant;  
  5.   iCount: Integer;  
  6.   Flag: Boolean;  
  7. begin  
  8.   Result := 0;  
  9.   Flag :=True;  
  10.   iCount :=1;  
  11.   
  12.   slWebSiteList.Clear;  
  13.   while  Flag do  
  14.   begin  
  15.     try  
  16.       WebSite :=CreateOLEObject('IISNamespace');  
  17.       WebSite := WebSite.GetObject('IIsWebService''localhost/w3svc');  
  18.       //iCount得到第几个站点的信息  
  19.       WebServer := WebSite.GetObject('IIsWebServer', InttoStr(iCount));  
  20.       slWebSiteList.Add(WebServer.ServerComment);  
  21.       Result := iCount;  
  22.       Inc(iCount);  
  23.     except  
  24.       Flag :=False;  
  25.     end;  
  26.   end;  
  27. end;  


二、如何得到IIS的安装目录(如 C:\Inetpub\wwwroot)呢,
 
  1. function GetWebSitePath(const iWebSiteIndex:integer=1):string;  
  2. var  
  3.   WebSite, WebServer, WebRoot: Variant;  
  4. begin  
  5.   WebSite :=CreateOLEObject('IISNamespace');  
  6.   WebSite := WebSite.GetObject('IIsWebService''localhost/w3svc');  
  7.   WebServer := WebSite.GetObject('IIsWebServer', IntToStr(iWebSiteIndex));  
  8.   WebRoot := WebServer.GetObject('IIsWebVirtualDir''Root');  
  9.   Result := WebRoot.Path; //这就是地 址,C\Inetpub\wwwroot 或D:\Inetpub\wwwroot  
  10. end;  


三、如何得到WEB站点的IP和端 口
  1. function GetWebSiteIP(const iWebSiteIndex:Integer=1):string;  
  2. var  
  3.   InstallPath: String;  
  4.   WebSite, WebServer, WebRoot: Variant;  
  5.   ar: array of variant;  
  6. begin  
  7.   try  
  8.     WebSite :=CreateOLEObject('IISNamespace');  
  9.     WebSite := WebSite.GetObject('IIsWebService''localhost/w3svc');  
  10.     WebServer := WebSite.GetObject('IIsWebServer', IntToStr(iWebSiteIndex));  
  11.     ar :=    WebServer.ServerBindings;   //把IIS虚拟站点绑定的IP、端口、域名的值放入数组  
  12.     Result := ar[0];  
  13.    except  
  14.    end;  
  15. end;  

四、如何判断IIS下是否存在某个虚拟目录
  1. function VirtualDirIsExists(const strVirtualDir:string;  
  2.                                           const iWebSiteIndex:Integer=1):Boolean;  
  3. var  
  4.   WebSite, WebServer, WebRoot, VDir: Variant;  
  5.   Flag: Boolean;  
  6. begin  
  7.   Result := False;  
  8.   Flag :=True;  
  9.   WebSite :=CreateOLEObject('IISNamespace');  
  10.   WebSite := WebSite.GetObject('IIsWebService''localhost/w3svc');  
  11.   WebServer := WebSite.GetObject('IIsWebServer', IntToStr(iWebSiteIndex));  
  12.   WebRoot := WebServer.GetObject('IIsWebVirtualDir''Root');  
  13.   try  
  14.     vdir := WebRoot.GetObject('IIsWebVirtualDir', strVirtualDir);  
  15.     Result := True;  
  16.   except  
  17.     //如果出错则代表不存在此虚拟目录;  
  18.     Result := False;  
  19.   end;  
  20. end;  

五、如何创建 IIS 虚拟目录:
  
  1. function CreateVirtualDir(const strVirtualDir,strDir,AppName:string;  
  2.                                           const iWebSiteIndex:Integer=1):Boolean;  
  3. var  
  4.   WebSite, WebServer, WebRoot, VDir: Variant;  
  5. begin  
  6.   try  
  7.     WebSite := CreateOleObject('IISNamespace');  
  8.     WebSite := WebSite.GetObject('IIsWebService''localhost/w3svc');  
  9.     WebServer := WebSite.GetObject('IIsWebServer', IntToStr(iWebSiteIndex));  
  10.     webserver.SetInfo;  
  11.     WebRoot := WebServer.GetObject('IIsWebVirtualDir''Root');  
  12.     VDir := WebRoot.Create('IIsWebVirtualDir', strVirtualDir);  
  13.     //虚拟目录权限设置  
  14.     VDir.AccessRead := True;   //读取  
  15.     VDir.AccessWrite := False;  //写入  
  16.     VDir.AccessExecute := False;  //脚本和可执行文件  
  17.     VDir.AccessScript := True;   //纯脚本  
  18.     VDir.EnableDirBrowsing := False; //目录浏览  
  19.     VDir.Path := strDir;  
  20.     VDir.AppCreate(True);  //如果没有这句的话,虚拟目录就要人为的手工创建应用程序名  
  21.     VDir.AppFriendlyName :=AppName; //应用程序名  
  22.     VDir.SetInfo;  
  23.     Result := True;  
  24.   except  
  25.     Result := False;  
  26.   end;  
  27. end;  
  28. //附虚拟目录的属性:  
  29. //有网友问我为什么前面的创建虚拟目录的例子执行权限都是无,看 了一下自己写滴,确实有一些属性没有设置,现贴出一些常用属性供参考  
  30. { 
  31.   VDir.AccessRead := True;   //读 取 
  32.   VDir.AccessWrite := True;  // 写入 
  33.   VDir.AccessExecute := True;  // 脚本和可执行文件 
  34.   VDir.AccessScript := True;   // 纯脚本 
  35.   VDir.EnableDirBrowsing := True; // 目录浏览 
  36.   VDir.Path := 'F:\VariantTest'; // 路径 
  37.   VDir.AppCreate(True); 
  38.   VDir.AppFriendlyName :='VariantTest'; // 应用程序名 
  39. }  


六、如何删除虚拟目录
  1. function DeleteVirtualDir(const strVirtualDir: string;const iWebSiteIndex:Integer=1): Boolean;  
  2. var  
  3.   WebSite, WebServer, WebRoot,vdir: Variant;  
  4. begin  
  5.   Result := True;    
  6.   try  
  7.     WebSite := CreateOleObject('IISNamespace');  
  8.     WebSite := WebSite.GetObject('IIsWebService''localhost/w3svc');  
  9.     WebServer := WebSite.GetObject('IIsWebServer', IntToStr(iWebSiteIndex));  
  10.     WebRoot := WebServer.GetObject('IIsWebVirtualDir''Root');  
  11.     WebRoot.Delete('IIsWebVirtualDir',strVirtualDir);        
  12.   except  
  13.     Result := False;  
  14.   end;    
  15. end;  


七、如何删除虚拟目录应用 程序名
  1. function DeleteVirtualDirApp(const strVirtualDir: string;const iWebSiteIndex:Integer=1): Boolean;  
  2. var  
  3.   WebSite, WebServer, WebRoot,vdir: Variant;  
  4. begin  
  5.   Result := True;  
  6.   try  
  7.     WebSite := CreateOleObject('IISNamespace');  
  8.     WebSite := WebSite.GetObject('IIsWebService''localhost/w3svc');  
  9.     WebServer := WebSite.GetObject('IIsWebServer', IntToStr(iWebSiteIndex));  
  10.     WebRoot := WebServer.GetObject('IIsWebVirtualDir''Root');  
  11.     vdir :=WebRoot.GetObject('IIsWebVirtualDir', strVirtualDir);  
  12.     vdir.AppDelete;  
  13.     vdir.SetInfo;  
  14.   except  
  15.     Result := False;  
  16.   end;  
  17. end;  


八、如何通过程序控制默认 WEB站点的例子,三种状态2是运行,4是停止,6是暂停
  1. // 停止WEB站点  
  2. function StopWebServer(const iWebSiteIndex:Integer=1):Boolean;  
  3. var  
  4.   WebSite, WebServer: Variant;  
  5. begin  
  6.    try  
  7.       WebSite :=CreateOLEObject('IISNamespace');  
  8.       WebSite := WebSite.GetObject('IIsWebService''localhost/w3svc');  
  9.       WebServer := WebSite.GetObject('IIsWebServer', IntToStr(iWebSiteIndex));  
  10.       if string(WebServer.ServerState) ='2' then  
  11.       begin  
  12.         WebServer.Stop;  
  13.         //Showmessage('停止服务成功');  
  14.         Result := True;  
  15.       end;  
  16.    except  
  17.       //Showmessage('停止服务失败');  
  18.       Result := False;  
  19.    end;  
  20. end;  
  21.   
  22. //启动WEB站点  
  23. function StartWebServer(const iWebSiteIndex:Integer=1):Boolean;  
  24. var  
  25.   WebSite, WebServer: Variant;  
  26. begin  
  27.     try  
  28.       WebSite :=CreateOLEObject('IISNamespace');  
  29.       WebSite := WebSite.GetObject('IIsWebService''localhost/w3svc');  
  30.       WebServer := WebSite.GetObject('IIsWebServer', IntToStr(iWebSiteIndex));  
  31.       if string(webserver.ServerState) ='4' then  
  32.       begin  
  33.         WebServer.Start;  
  34.         //Showmessage('启动服务成功');  
  35.         Result := True;  
  36.       end;  
  37.     except  
  38.       //Showmessage('启动服务失败');  
  39.       Result := False;  
  40.     end;  
  41. end;  
  42.   
  43. //暂停WEB站点  
  44. function PauseWebServer(const iWebSiteIndex:Integer=1):Boolean;  
  45. var  
  46.   WebSite, WebServer: Variant;  
  47. begin  
  48.   try  
  49.     WebSite :=CreateOLEObject('IISNamespace');  
  50.     WebSite := WebSite.GetObject('IIsWebService''localhost/w3svc');  
  51.     WebServer := WebSite.GetObject('IIsWebServer', IntToStr(iWebSiteIndex));  
  52.     if string(WebServer.ServerState) ='2' then  
  53.     begin  
  54.       WebServer.Pause;  
  55.       //Showmessage('暂停服务成功');  
  56.       Result := True;  
  57.     end;  
  58.   except  
  59.     //Showmessage('暂停服务失败');  
  60.     Result := False;  
  61.   end;  
  62. end;  


九、Q: 如何重启IIS  A:用IISRESET /? 命令
  1. function ControlIIS(const strAction:string='restart'):Boolean;  
  2. //参数  /restart   停止并重起所有INTERNET服务  
  3. //      /start     启动所有 INTERNET   服务  
  4. //      /stop      停止所有INTERNET服务  
  5. //      /reboot    重起计算机  
  6. //      /Status    显示所有INTERNET服务状 态等等  
  7. var  
  8.   sCmd:string;  
  9. begin  
  10.   sCmd:='IISReset/'+strAction;  
  11.   try  
  12.     WinExec(pchar(sCmd),SW_HIDE);  
  13.     //ShellExecute(handle,'open',pchar(sCmd),'-s','   ',SW_HIDE);  
  14.     Result := True;  
  15.   except  
  16.     //messagedlg('执行失败',mtinformation,[mbok],0);  
  17.     Result := False;  
  18.   end;  
  19. end;  


我已把它们做成了一个单元文件,大家可直接下载,这样你只要在程序  uses uIIS;就可以使用了。


而且我也做了一个演示程序:点击在新窗口中浏览此图片
演示程序下载:

阅读(414) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~