本文主要描述的是如何利用Delphi对Web IIS进行控制,应该说常用的功能基本都有了。为了共用我已把它做成了一个独立的单元文件,大家可直接下载,这样我们只要直接在程序 uses uIIS就可以使用了,同时我也做了一个演示程序。
一、如何得到机器上IIS中所有的WEB虚拟站点.
function GetWebSiteList(slWebSiteList:TStrings):Integer; var InstallPath: String; WebSite, WebServer, WebRoot: Variant; iCount: Integer; Flag: Boolean; begin Result := 0; Flag :=True; iCount :=1; slWebSiteList.Clear; while Flag do begin try WebSite :=CreateOLEObject('IISNamespace'); WebSite := WebSite.GetObject('IIsWebService', 'localhost/w3svc'); //iCount得到第几个站点的信息 WebServer := WebSite.GetObject('IIsWebServer', InttoStr(iCount)); slWebSiteList.Add(WebServer.ServerComment); Result := iCount; Inc(iCount); except Flag :=False; end; end; end;
二、如何得到IIS的安装目录(如C:/Inetpub/wwwroot)呢,
function GetWebSitePath(const iWebSiteIndex:integer=1):string; var WebSite, WebServer, WebRoot: Variant; begin WebSite :=CreateOLEObject('IISNamespace'); WebSite := WebSite.GetObject('IIsWebService', 'localhost/w3svc'); WebServer := WebSite.GetObject('IIsWebServer', IntToStr(iWebSiteIndex)); WebRoot := WebServer.GetObject('IIsWebVirtualDir', 'Root'); Result := WebRoot.Path; //这就是地址,C/Inetpub/wwwroot 或D:/Inetpub/wwwroot end;
三、如何得到WEB站点的IP和端口
function GetWebSiteIP(const iWebSiteIndex:Integer=1):string; var InstallPath: String; WebSite, WebServer, WebRoot: Variant; ar: array of variant; begin try WebSite :=CreateOLEObject('IISNamespace'); WebSite := WebSite.GetObject('IIsWebService', 'localhost/w3svc'); WebServer := WebSite.GetObject('IIsWebServer', IntToStr(iWebSiteIndex)); ar := WebServer.ServerBindings; //把IIS虚拟站点绑定的IP、端口、域名的值放入数组 Result := ar[0]; except end; end;
四、如何判断IIS下是否存在某个虚拟目录
function CreateVirtualDir(const strVirtualDir,strDir,AppName:string; const iWebSiteIndex:Integer=1):Boolean; var WebSite, WebServer, WebRoot, VDir: Variant; begin try WebSite := CreateOleObject('IISNamespace'); WebSite := WebSite.GetObject('IIsWebService', 'localhost/w3svc'); WebServer := WebSite.GetObject('IIsWebServer', IntToStr(iWebSiteIndex)); webserver.SetInfo; WebRoot := WebServer.GetObject('IIsWebVirtualDir', 'Root'); VDir := WebRoot.Create('IIsWebVirtualDir', strVirtualDir); //虚拟目录权限设置 VDir.AccessRead := True; //读取 VDir.AccessWrite := False; //写入 VDir.AccessExecute := False; //脚本和可执行文件 VDir.AccessScript := True; //纯脚本 VDir.EnableDirBrowsing := False; //目录浏览 VDir.Path := strDir; VDir.AppCreate(True); //如果没有这句的话,虚拟目录就要人为的手工创建应用程序名 VDir.AppFriendlyName :=AppName; //应用程序名 VDir.SetInfo; Result := True; except Result := False; end; end; //附虚拟目录的属性: //有网友问我为什么前面的创建虚拟目录的例子执行权限都是无,看了一下自己写滴,确实有一些属性没有设置,现贴出一些常用属性供参考 { VDir.AccessRead := True; //读取 VDir.AccessWrite := True; //写入 VDir.AccessExecute := True; //脚本和可执行文件 VDir.AccessScript := True; //纯脚本 VDir.EnableDirBrowsing := True; //目录浏览 VDir.Path := 'F:/VariantTest'; //路径 VDir.AppCreate(True); VDir.AppFriendlyName :='VariantTest'; //应用程序名 }
六、如何删除虚拟目录
function DeleteVirtualDir(const strVirtualDir: string;const iWebSiteIndex:Integer=1): Boolean; var WebSite, WebServer, WebRoot,vdir: Variant; begin Result := True; try WebSite := CreateOleObject('IISNamespace'); WebSite := WebSite.GetObject('IIsWebService', 'localhost/w3svc'); WebServer := WebSite.GetObject('IIsWebServer', IntToStr(iWebSiteIndex)); WebRoot := WebServer.GetObject('IIsWebVirtualDir', 'Root'); WebRoot.Delete('IIsWebVirtualDir',strVirtualDir); except Result := False; end; end;
七、如何删除虚拟目录应用程序名
function DeleteVirtualDirApp(const strVirtualDir: string;const iWebSiteIndex:Integer=1): Boolean; var WebSite, WebServer, WebRoot,vdir: Variant; begin Result := True; try WebSite := CreateOleObject('IISNamespace'); WebSite := WebSite.GetObject('IIsWebService', 'localhost/w3svc'); WebServer := WebSite.GetObject('IIsWebServer', IntToStr(iWebSiteIndex)); WebRoot := WebServer.GetObject('IIsWebVirtualDir', 'Root'); vdir :=WebRoot.GetObject('IIsWebVirtualDir', strVirtualDir); vdir.AppDelete; vdir.SetInfo; except Result := False; end; end;
八、如何通过程序控制默认WEB站点的例子,三种状态2是运行,4是停止,6是暂停
//停止WEB站点 function StopWebServer(const iWebSiteIndex:Integer=1):Boolean; var WebSite, WebServer: Variant; begin try WebSite :=CreateOLEObject('IISNamespace'); WebSite := WebSite.GetObject('IIsWebService', 'localhost/w3svc'); WebServer := WebSite.GetObject('IIsWebServer', IntToStr(iWebSiteIndex)); if string(WebServer.ServerState) ='2' then begin WebServer.Stop; //Showmessage('停止服务成功'); Result := True; end; except //Showmessage('停止服务失败'); Result := False; end; end; //启动WEB站点 function StartWebServer(const iWebSiteIndex:Integer=1):Boolean; var WebSite, WebServer: Variant; begin try WebSite :=CreateOLEObject('IISNamespace'); WebSite := WebSite.GetObject('IIsWebService', 'localhost/w3svc'); WebServer := WebSite.GetObject('IIsWebServer', IntToStr(iWebSiteIndex)); if string(webserver.ServerState) ='4' then begin WebServer.Start; //Showmessage('启动服务成功'); Result := True; end; except //Showmessage('启动服务失败'); Result := False; end; end; //暂停WEB站点 function PauseWebServer(const iWebSiteIndex:Integer=1):Boolean; var WebSite, WebServer: Variant; begin try WebSite :=CreateOLEObject('IISNamespace'); WebSite := WebSite.GetObject('IIsWebService', 'localhost/w3svc'); WebServer := WebSite.GetObject('IIsWebServer', IntToStr(iWebSiteIndex)); if string(WebServer.ServerState) ='2' then begin WebServer.Pause; //Showmessage('暂停服务成功'); Result := True; end; except //Showmessage('暂停服务失败'); Result := False; end; end;
九、Q: 如何重启IIS A:用IISRESET /? 命令
function ControlIIS(const strAction:string='restart'):Boolean; //参数 /restart 停止并重起所有INTERNET服务 // /start 启动所有INTERNET 服务 // /stop 停止所有INTERNET服务 // /reboot 重起计算机 // /Status 显示所有INTERNET服务状态等等 var sCmd:string; begin sCmd:='IISReset/'+strAction; try WinExec(pchar(sCmd),SW_HIDE); //ShellExecute(handle,'open',pchar(sCmd),'-s',' ',SW_HIDE); Result := True; except //messagedlg('执行失败',mtinformation,[mbok],0); Result := False; end; end;
我已把它们做成了一个单元文件,大家可直接下载,这样你只要在程序 uses uIIS;就可以使用了。