本文主要描述的是如何利用Delphi对Web IIS进行控制,应该说常用的功能基本都有了。为了共用我已把它做成了一个独立的单元文件,大家可直接下载,这样我们只要直接在程序uses uIIS就可
本文主要描述的是如何利用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下是否存在某个虚拟目录
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是暂停
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;就可以使用了。
点击这里下载文件: uIIS.rar
而且我也做了一个演示程序:
演示程序下载:
点击这里下载文件: IIS_Demo.rar