Add/Remove ISAPI Filter to/from IIS Automatically Using Delphi

  function SplitString(Source,ch: String): TStringList;
  var
    temp:String;
    i:Integer;
  begin
    Result:=TStringList.Create;
    if Source = '' then Exit;
    temp := Source;
    i := pos(ch,Source);
    while i <> 0 do
    begin
       Result.add(copy(temp,0,i-1));
       Delete(temp,1,i);
       i := pos(ch,temp);
    end;
    Result.add(temp);
  end;
 
  //Add a global IIS isapi filter
  function AddISAPIFilterToIISGlobal(FilterName, FilterPath, FilterDesc:String):Boolean;
  var
    IISNameSpace,
    IISWebService,
    IISFilters,
    IISFilter:Variant;
  begin
    Result := True;
    try
      try
        IISNameSpace := CreateOleObject('IISNamespace');
        IISWebService := IISNameSpace.GetObject('IIsWebService',   'localhost/w3svc');
        IISFilters := IISWebService.GetObject('IISFilters',   'Filters');
        IISFilters.FilterLoadOrder := IISFilters.FilterLoadOrder + ',' + FilterName;
        IISFilters.SetInfo;

        IISFilter := IISFilters.Create('IIsFilter',FilterName);
        IISFilter.FilterPath := FilterPath;
        IISFilter.FilterDescription := FilterDesc;
        IISFilter.SetInfo;
      except
        Result := False;
      end;
    finally
      IISFilter := Unassigned;
      IISFilters := Unassigned;
      IISWebService := Unassigned;
      IISNameSpace := Unassigned;
    end;
  end;

  //Add a isapi IIS filter to default web site
  function AddISAPIFilterToIISDefaultSite(FilterName, FilterPath, FilterDesc:String):Boolean;
  var
    IISNameSpace,
    IISWebService,
    IISWebServer,
    IISFilters,
    IISFilter:Variant;
  begin
    Result := True;
    try
      try
        IISNameSpace := CreateOleObject('IISNamespace');
        IISWebService := IISNameSpace.GetObject('IISWebService',   'localhost/w3svc');
        IISWebServer := IISWebService.GetObject('IISWebServer',   '1');
        IISFilters := IISWebServer.GetObject('IISFilters',   'Filters');
        IISFilters.FilterLoadOrder := IISFilters.FilterLoadOrder + ',' + FilterName;
        IISFilters.SetInfo;

        IISFilter := IISFilters.Create('IISFilter',FilterName);
        IISFilter.FilterPath := FilterPath;
        IISFilter.FilterDescription := FilterDesc;
        IISFilter.SetInfo;
      except
        Result := False;
      end;
    finally
      IISFilter := Unassigned;
      IISFilters := Unassigned;
      IISWebService := Unassigned;
      IISNameSpace := Unassigned;
    end;
  end;

  function RemoveISAPIFilterFromIISGlobal(FilterName:String):Boolean;
  var
    IISNameSpace,
    IISWebService,
    IISFilters,
    LoadOrder:Variant;
    List:TStringList;
    I:Integer;
  begin
    Result := True;
    List := nil;
    LoadOrder := '';
    try
      try
        IISNameSpace := CreateOleObject('IISNamespace');
        IISWebService := IISNameSpace.GetObject('IIsWebService',   'localhost/w3svc');
        IISFilters := IISWebService.GetObject('IISFilters',   'Filters');
        List := SplitString(IISFilters.FilterLoadOrder, ',');
        for I := 0 to List.Count - 1 do
        begin
          if FilterName <> List[I] then
          begin
            if I <> List.Count - 1 then
              LoadOrder := LoadOrder + List[I] + ','
            else
              LoadOrder := LoadOrder + List[I];
          end;
        end;
        if IISFilters.FilterLoadOrder <> LoadOrder then
        begin
          IISFilters.FilterLoadOrder := LoadOrder;
          IISFilters.SetInfo;
        end;

        IISFilters.Delete('IISFilters', FilterName);
      except
        Result := False;
      end;
    finally
      LoadOrder := Unassigned;
      IISFilters := Unassigned;
      IISWebService := Unassigned;
      IISNameSpace := Unassigned;
      if List <> nil then
        List.Free;
    end;
  end;

  function RemoveISAPIFilterFromIISDefaultSite(FilterName:String):Boolean;
  var
    IISNameSpace,
    IISWebService,
    IISWebServer,
    IISFilters,
    LoadOrder:Variant;
    List:TStringList;
    I:Integer;
  begin
    Result := True;
    List := nil;
    LoadOrder := '';
    try
      try
        IISNameSpace := CreateOleObject('IISNamespace');
        IISWebService := IISNameSpace.GetObject('IIsWebService',   'localhost/w3svc');
        IISWebServer := IISWebService.GetObject('IISWebServer',   '1');
        IISFilters := IISWebServer.GetObject('IISFilters',   'Filters');
        List := SplitString(IISFilters.FilterLoadOrder, ',');
        for I := 0 to List.Count - 1 do
        begin
          if FilterName <> List[I] then
          begin
            if I <> List.Count - 1 then
              LoadOrder := LoadOrder + List[I] + ','
            else
              LoadOrder := LoadOrder + List[I];
          end;
        end;
        if IISFilters.FilterLoadOrder <> LoadOrder then
        begin
          IISFilters.FilterLoadOrder := LoadOrder;
          IISFilters.SetInfo;
        end;

        IISFilters.Delete('IISFilters', FilterName);
      except
        Result := False;
      end;
    finally
      LoadOrder := Unassigned;
      IISFilters := Unassigned;
      IISWebServer := Unassigned;
      IISWebService := Unassigned;
      IISNameSpace := Unassigned;
      if List <> nil then
        List.Free;
    end;
  end;
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值