本文主要描述的是如何利用Delphi对Web IIS进行控制,应该说常用的功能基本都有了。为了共用我已把它做成了一个独立的单元文件,大家可直接下载,这样我们只要直接在程序 uses uIIS就可以使用了,同时我也做了一个演示程序。
一、如何得到机器上IIS中所有的WEB虚拟站点.
二、如何得到IIS的安装目录(如C:/Inetpub/wwwroot)呢,
三、如何得到WEB站点的IP和端口
四、如何判断IIS下是否存在某个虚拟目录
五、如何创建 IIS 虚拟目录:
六、如何删除虚拟目录
七、如何删除虚拟目录应用程序名
八、如何通过程序控制默认WEB站点的例子,三种状态2是运行,4是停止,6是暂停
九、Q: 如何重启IIS A:用IISRESET /? 命令
我已把它们做成了一个单元文件,大家可直接下载,这样你只要在程序 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 VirtualDirIsExists(const strVirtualDir:string;
- const iWebSiteIndex:Integer=1):Boolean;
- var
- WebSite, WebServer, WebRoot, VDir: Variant;
- Flag: Boolean;
- begin
- Result := False;
- Flag :=True;
- WebSite :=CreateOLEObject('IISNamespace');
- WebSite := WebSite.GetObject('IIsWebService', 'localhost/w3svc');
- WebServer := WebSite.GetObject('IIsWebServer', IntToStr(iWebSiteIndex));
- WebRoot := WebServer.GetObject('IIsWebVirtualDir', 'Root');
- try
- vdir := WebRoot.GetObject('IIsWebVirtualDir', strVirtualDir);
- Result := True;
- except
- //如果出错则代表不存在此虚拟目录;
- Result := False;
- 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;就可以使用了。