请问怎样获得IIS的站点或虚拟目录的列表和对应的物理路径(100分)

  • 主题发起人 主题发起人 hstod
  • 开始时间 开始时间
H

hstod

Unregistered / Unconfirmed
GUEST, unregistred user!
如何用D6或D7编写一个
获得IIS的站点或虚拟目录的列表和对应的物理路径、还有其它信息的应用程序?
调用那个ocx或是com可以获得以上信息?
 
那现在已知哪些东西?
 
server.mappath(FileName)
 
我用的是exe程序不是webApplication
就怕出现Supermay这样的答案 还是出现了?[:(]

billlove
我现在还不知道有什么东西可以iis的站点列表和物理路径等相关信息
但是有个可以建立站点的?
不过没试过能不能获得站点的信息
 
没有知道?
 
自己顶!!!!顶!
 
帮你顶,我也期待答案的出现。
 
使用注册表:
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/W3SVC/Parameters/Virtual Roots/
或者:
WebSite:=CreateOleObject('IISNamespace');
WebSite:=WebSite.GetObject('IIsWebService', 'localhost/w3svc');
WebServer:=WebSite.GetObject('IIsWebServer', '1');
WebRoot:=WebServer.GetObject('IIsWebVirtualDir', 'Root');
try VDir:=WebRoot.GetObject('IIsWebVirtualDir',Edit1.Text); VDirExists:=True; except VDirExists:=False; end;
 
对你可能有用,但是我自己不想调试,没有那个环境呀
这是 Delphi中用Adsi创建IIS虚拟目录 ,不是得到信息,但是可能已经很接近了
你自己试试一下里面的方法
  先引入类型库(Project|Import Type Library)adsiis.dll、iisext.dll和activeds.tlb新建一个单元,声明。

unit ActiveDs;

interface

 function ADsGetObject(const PathName: WideString; const GUID:

TGUID; out I: IUnknown): HRESULT; stdcall;

implementation

 function ADsGetObject;   external 'activeds.dll' name 'ADsGetObject';

end.

方法一(参照C++)、

var

 I: IADsContainer;

 ADs: IADs;

begin

 if ADsGetObject('IIS://localhost/w3svc', IID_IADsContainer, IUnknown(I)) = S_Ok then

 begin

  ADs := IADs(I.GetObject('IIsWebServer', '1'));

  ShowMessage(ADs.ADsPath);

  if ADs.QueryInterface(IID_IADsContainer, I) = S_OK then

  begin

   ADs := IADs(I.GetObject('IIsWebVirtualDir', 'Root'));

   ShowMessage(ADs.ADsPath);

   if ADs.QueryInterface(IID_IADsContainer, I) = S_OK then

   begin

    ADs := IADs(I.Create('IIsWebVirtualDir', 'DelphiTest'));

    ADs.Put('AccessRead', 'True');

    ADs.Put('Path', 'c:');

    ADs.SetInfo;

   end;

  end;

 end;

end;

方法二(使用接口)、

procedure TForm3.BitBtn4Click(Sender: TObject);

var

 Disp: IDispatch;

begin

 Disp := IISNamespace1.GetObject('IIsWebService', 'localhost/w3svc');

 Disp := (Disp as IADsContainer).GetObject('IIsWebServer', '1');

 Disp := (Disp as IADsContainer).GetObject('IIsWebVirtualDir', 'Root');

 Disp := (Disp as IADsContainer).Create('IIsWebVirtualDir', 'DelphiADSITest');

 (Disp as IADs).Put('AccessRead', 'True');

 (Disp as IADs).Put('Path', 'c:');

 (Disp as IADs).SetInfo;

end;

方法三(使用Variant,就是类似VB和ASP的方法)、

procedure TForm2.BitBtn1Click(Sender: TObject);

var

 WebSite, WebServer, WebRoot, VDir: Variant;

begin

 WebSite := CreateOleObject('IISNamespace');

 WebSite := WebSite.GetObject('IIsWebService', 'localhost/w3svc');

 WebServer := WebSite.GetObject('IIsWebServer', '1');

 WebRoot := WebServer.GetObject('IIsWebVirtualDir', 'Root');

 VDir := WebRoot.Create('IIsWebVirtualDir', 'VariantTest');

 VDir.AccessRead := True;

 VDir.Path := 'C:';

 VDir.SetInfo;

end;

 


 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=468148
 
多谢各位
在注册表
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/W3SVC/Parameters/
处没有找到 Virtual Roots/
[:(]

我再试试别一种方法!
 
重位兄弟!
这个有多出错误 最关键的是
WebSite:=CreateOleObject('IISNamespace');
WebSite:=WebSite.GetObject('IIsWebService', 'localhost/w3svc');
WebServer:=WebSite.GetObject('IIsWebServer', '1');
WebRoot:=WebServer.GetObject('IIsWebVirtualDir', 'Root');
try VDir:=WebRoot.GetObject('IIsWebVirtualDir',Edit1.Text); VDirExists:=True; except VDirExists:=False; end;

GetObject 方法无法使用
我已经引用了ComObj单元了?
可还是不行 提示
[Error] Unit1.pas(34): Undeclared identifier: 'GetObject'
头痛
 
我找到了iis6.0的解决办法,
可是对于iis5.0还是一愁莫展!
谁想要iis6.0的解决方法?(获得iis中各站点的配置信息)
 
我想要,能不能给发一份
e_mail:master@richfun.com
谢谢!
 
等我改好后一并发出
可是大家活要帮忙看看谁知道怎样获得iis5的站点和虚拟目录 信息!
 
给你一段代码,是我测试程序用的,一看就明白了,然后查查 MSDN,了解 IISWEBSERVER 之类的属性。

procedure TfmMain.Button1Click(Sender: TObject);
var
WebSite, LocalHost, WebService, WebServer, WebRoot, VDir: Variant;
begin
WebSite := CreateOleObject('IISNamespace');
WebService := WebSite.GetObject('IIsWebService', 'localhost/w3svc');

//删除原来的默认网站
try
WebService.Delete('IIsWebServer', '1');
except
end;

//本机网络服务带宽限制
LocalHost := WebSite.GetObject('IIsComputer', 'localhost');
LocalHost.MaxBandWidth := 1024 shl 10;

//网络服务
WebService.CpuLoggingOptions := $00000007; //记录所有 IIS 服务的 CPU 使用情况
WebService.CpuLimitsEnabled := True; //启动 IIS 进程限制
WebService.CpuLimitLogEvent := 50 * 1000; //最大 CPU 使用程度
WebService.CpuLimitProcStop := 50 * 1000; //强制性限制

//网站
WebServer := WebService.Create('IIsWebServer', '1'); //创建标识为 1 的网站
WebServer.ServerComment := 'LinkWorks'; //网站说明

//主目录
try
WebRoot := WebServer.Create('IIsWebVirtualDir', 'Root'); //创建网站目录根节点
except
WebRoot := WebServer.GetObject('IIsWebVirtualDir', 'Root'); //创建网站目录根节点
end;
WebRoot.Path := 'c:/program files/morrowsoft/linkworks/webserver/infoweb'; //设置主目录
WebRoot.AppFriendlyName := 'LinkWorks 应用'; //创建应用程序
WebRoot.AppIsolated := 2; //应用程序保护为中
WebRoot.AccessScript := True; //执行许可为纯脚本
WebRoot.DefaultDoc := 'index.asp'; //默认文档
WebRoot.AspScriptTimeout := 900; //ASP 脚本执行超时间(秒)
WebRoot.AppCreate(True); //创建应用程序

//虚拟目录
{
try
VDir := WebRoot.Create('IIsWebVirtualDir', 'Download'); //创建虚拟目录
VDir.AccessRead := True; //读取权限
VDir.AccessExecute := False; //执行权限
VDir.Path := 'c:/program files/morrowsoft/linkworks/data/mrinfosys/download/'; //虚拟目录位置
VDir.SetInfo;
except
end;
}

//保存设置信息
WebRoot.SetInfo;
WebServer.SetInfo;
WebService.SetInfo;
LocalHost.SetInfo;

//Restart IIS here

end;
 
多谢各位
可能是我没有表达清除意思
我想获得的是iis中所有站点和虚拟目录的列表和地址端口等信息,而不是怎样建立站点和虚拟目录
 
<<<<如何用D6或D7编写一个
<<<<获得IIS的站点或虚拟目录的列表和对应的物理路径、还有其它信息的应用程序?
<<<<调用那个ocx或是com可以获得以上信息?
连写都告诉你了,难道还不会读吗?
WebServer := WebService.Create('IIsWebServer', '1'); 是第一个站点,以此类推.所有站点不都出来了吗??
 
我比较笨!先谢谢了

那我怎样获得共有几个站呢?
或都站内公有几个虚拟目录呢?
 
http://www.iisfaq.com/Default.aspx?tabid=3026
 
后退
顶部