急救:如何获取IIS的信息(只要是可行的就给分) 如何用程序获取IIS的信息?比如建立了哪些站点,有哪些虚目录?有谁知道吗?急求~~~~~ 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 SilveryFox(一天一点爱恋......) :能说详细点吗? 更多的还要看msdnAPI是绝对解决不了这些问题的,必须使用COM,使用ADSI接口。一、生成接口文件------------------------------------------------------------------------由于myADSI.dll不是OCX/EXE方式的ActiveX服务,所以,必须手工生成TLB接口文件。运行\Delphi\BIN目录的TLIBImp.exe文件。如下: tlibimp -L+ MyADSI.dll // L+参数是生成能够在Delphi的IDE环境中使用的可视组件。可选。 // 如果你使用adsiis.tlb,也需要用tlibimp来生成接口文件。这个控件的编写者有病,会将COM控件命名为Contorl,生成的Delphi类名叫TControl,与Delphi自己的一个控件会冲突,所以你需要打开生成的myADSILib_TLB.pas文件,将所有的TControl替换成TIISControl。就成了。——你也可以不替换,但出了问题可被怪我。 :)二、安装组件------------------------------------------------------------------------安装myADSILib_TLB.pas到组件板,与普通操作无二。不讲了。三、编程------------------------------------------------------------------------下面假设控件名:IISConfigvar selectDir : integer; //示例中用来控制创建的虚拟目录类型。procedure TMainForm.Button1Click(Sender: TObject);const //Permissions Const, From MSDN. IISReadAccess = 1; IISWriteAccess = 2; IISExecuteAccess = 4; //(including ScriptAccess) IISScriptAccess = 512;var VDirName : string;begin VDirName := Edit1.Text; if (VDirName='') or (VDirName[1]='/') then begin showMessage('虚拟目录不能为空, 且第一个字符不能为''/''.'#$0D'请重新填写.'); exit; end; IISConfig.Site := 1; //如果IIS中有多个Web Site,这里可选。 IISConfig.Connect; try if BOOL(IISConfig.ExistsVDir(VDirName)) then showMessage('对不起, 该虚拟目录已经存在.'#$0D'不能创建虚拟目录.') else case selectDir of 1 : //普通目录 begin IISConfig.Permissions := IISReadAccess; if not BOOL(IISConfig.CreateVDir(WideString(PBF.Folder), WideString(VDirName))) then showMessage('对不起, 未知情况导致虚拟目录不能成功创建.'); end; 2 : //脚本目录 begin IISConfig.Permissions := IISExecuteAccess; if not BOOL(IISConfig.CreateVDir(WideString(PBF.Folder), WideString(VDirName))) then showMessage('对不起, 未知情况导致虚拟目录不能成功创建.'); end; end; finally IISConfig.Disconnect; end;end;TIISControl主要有三个功能:CreateVDir(), ExistsVDir(), DeleteVDir()。OnStartPage()和OnEndPage()两个功能我也没有太搞明白,好象是设置ASP的起始和结束页的。Permissions设置的全部定义是:{ //Define In MSDN MD_ACCESS_READ 0x00000001 Allow read access. MD_ACCESS_WRITE 0x00000002 Allow write access. MD_ACCESS_EXECUTE 0x00000004 Allow file execution (includes script permission). MD_ACCESS_SOURCE 0x00000010 Allow source access. MD_ACCESS_SCRIPT 0x00000200 Allow script execution. MD_ACCESS_NO_REMOTE_WRITE 0x00000400 Local write access only. MD_ACCESS_NO_REMOTE_READ 0x00001000 Local read access only. MD_ACCESS_NO_REMOTE_EXECUTE 0x00002000 Local execution only. MD_ACCESS_NO_REMOTE_SCRIPT 0x00004000 Local host access only. }但注意MyASDI中的Permissions是smallInt类型的。小有区别啦。 ^-^四、其它------------------------------------------------------------------------如果你要发布软件的话,当然不能要用户自已去运行regsvr32.exe来注册MyADSI.dll了。如果你不是使用专门的安装工具来做这件事的话,你可以用一段小程序来完成这件事。type TRegisterMode = (regRegister, regUnregister);function OLERegisterDLLFile (strFileName : STRING; mode : TRegisterMode) : BOOLEAN;type TOleRegister = function : HResult;var hLib : THandle; fnAdr: TFarProc;begin Result := FALSE; hLib := LoadLibrary(PCHAR(strFileName)); if (hLib > 0) then begin try if (mode = regRegister) then fnAdr := GetProcAddress(hLib, pchar('DllRegisterServer')) else fnAdr := GetProcAddress(hLib, pchar('DllUnregisterServer')); if (fnAdr <> nil) then Result := (TOleRegister(fnAdr) >= 0); finally FreeLibrary(hLib); end; end;end; { RegisterDLLFile }OLERegisterDLLFile()函数可以加到TForm.onCreate和TForm.onClose事件中。即可以完成自动注册和卸载。 如何修改DELPHI中的MEMO数据 如何取得TreeView的父节点?高手帮忙! 多层开发中中间层中的一个问题 AdoCommand使用遇到的问题 如何对jpg图像使用bitblt?? 我有C基础学BCB比Delphi好? 纵向垒加的SQL应该怎么写? 开发三层程序,用Delphi好不好? Delphi程序最小化的问题 请问在Delphi中有没有取到小数(如:1.23),我想分别取到1和23,不想通过对pos字符串方式,有没有函数可用? 打包问题??非常急用。。。 一个函数返回的问题,请一定进来看看
能说详细点吗?
API是绝对解决不了这些问题的,必须使用COM,使用ADSI接口。
一、生成接口文件
------------------------------------------------------------------------
由于myADSI.dll不是OCX/EXE方式的ActiveX服务,所以,必须手工生成TLB接口文件。
运行\Delphi\BIN目录的TLIBImp.exe文件。如下:
tlibimp -L+ MyADSI.dll
// L+参数是生成能够在Delphi的IDE环境中使用的可视组件。可选。
// 如果你使用adsiis.tlb,也需要用tlibimp来生成接口文件。
这个控件的编写者有病,会将COM控件命名为Contorl,生成的Delphi类名叫TControl,与
Delphi自己的一个控件会冲突,所以你需要打开生成的myADSILib_TLB.pas文件,将所有的
TControl替换成TIISControl。就成了。——你也可以不替换,但出了问题可被怪我。 :)二、安装组件
------------------------------------------------------------------------
安装myADSILib_TLB.pas到组件板,与普通操作无二。不讲了。三、编程
------------------------------------------------------------------------
下面假设控件名:IISConfig
var selectDir : integer; //示例中用来控制创建的虚拟目录类型。
procedure TMainForm.Button1Click(Sender: TObject);
const //Permissions Const, From MSDN.
IISReadAccess = 1;
IISWriteAccess = 2;
IISExecuteAccess = 4; //(including ScriptAccess)
IISScriptAccess = 512;
var
VDirName : string;
begin
VDirName := Edit1.Text;
if (VDirName='') or (VDirName[1]='/') then
begin
showMessage('虚拟目录不能为空, 且第一个字符不能为''/''.'#$0D'请重新填写.');
exit;
end; IISConfig.Site := 1; //如果IIS中有多个Web Site,这里可选。
IISConfig.Connect;
try
if BOOL(IISConfig.ExistsVDir(VDirName))
then showMessage('对不起, 该虚拟目录已经存在.'#$0D'不能创建虚拟目录.')
else
case selectDir of
1 : //普通目录
begin
IISConfig.Permissions := IISReadAccess;
if not BOOL(IISConfig.CreateVDir(WideString(PBF.Folder), WideString(VDirName))) then
showMessage('对不起, 未知情况导致虚拟目录不能成功创建.');
end;
2 : //脚本目录
begin
IISConfig.Permissions := IISExecuteAccess;
if not BOOL(IISConfig.CreateVDir(WideString(PBF.Folder), WideString(VDirName))) then
showMessage('对不起, 未知情况导致虚拟目录不能成功创建.');
end;
end;
finally
IISConfig.Disconnect;
end;
end;TIISControl主要有三个功能:CreateVDir(), ExistsVDir(), DeleteVDir()。
OnStartPage()和OnEndPage()两个功能我也没有太搞明白,好象是设置ASP的起始和结束页的。
Permissions设置的全部定义是:
{ //Define In MSDN
MD_ACCESS_READ 0x00000001 Allow read access.
MD_ACCESS_WRITE 0x00000002 Allow write access.
MD_ACCESS_EXECUTE 0x00000004 Allow file execution (includes script permission).
MD_ACCESS_SOURCE 0x00000010 Allow source access.
MD_ACCESS_SCRIPT 0x00000200 Allow script execution.
MD_ACCESS_NO_REMOTE_WRITE 0x00000400 Local write access only.
MD_ACCESS_NO_REMOTE_READ 0x00001000 Local read access only.
MD_ACCESS_NO_REMOTE_EXECUTE 0x00002000 Local execution only.
MD_ACCESS_NO_REMOTE_SCRIPT 0x00004000 Local host access only. }
但注意MyASDI中的Permissions是smallInt类型的。小有区别啦。 ^-^四、其它
------------------------------------------------------------------------
如果你要发布软件的话,当然不能要用户自已去运行regsvr32.exe来注册MyADSI.dll了。
如果你不是使用专门的安装工具来做这件事的话,你可以用一段小程序来完成这件事。
type
TRegisterMode = (regRegister, regUnregister);
function OLERegisterDLLFile (strFileName : STRING; mode : TRegisterMode) : BOOLEAN;
type
TOleRegister = function : HResult;
var
hLib : THandle;
fnAdr: TFarProc;
begin
Result := FALSE;
hLib := LoadLibrary(PCHAR(strFileName));
if (hLib > 0) then
begin
try
if (mode = regRegister) then
fnAdr := GetProcAddress(hLib, pchar('DllRegisterServer'))
else
fnAdr := GetProcAddress(hLib, pchar('DllUnregisterServer'));
if (fnAdr <> nil) then
Result := (TOleRegister(fnAdr) >= 0);
finally
FreeLibrary(hLib);
end;
end;
end; { RegisterDLLFile }OLERegisterDLLFile()函数可以加到TForm.onCreate和TForm.onClose事件中。即可以完成自动注册和卸载。