如何用程序获取IIS的信息?比如建立了哪些站点,有哪些虚目录?
有谁知道吗?急求~~~~~

解决方案 »

  1.   

    SilveryFox(一天一点爱恋......) :
    能说详细点吗?
      

  2.   

    更多的还要看msdn
    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事件中。即可以完成自动注册和卸载。