2012-02-07 17 views
5

私はhttp://www.activexperts.com/activmonitor/windowsmanagement/scripts/networking/windowsfirewall/デルファイ7のWindows Vista/7のファイアウォール例外のネットワークロケーション

procedure AddExceptionToFirewall (Caption: String; Executable: String); 
var 
    FirewallMsg: OleVariant; 
    Application: OleVariant; 
    CurrentProfile: OleVariant; 
begin 
    FirewallMsg:= CreateOLEObject ('HNetCfg.FwMgr'); 
    CurrentProfile:= FirewallMsg.LocalPolicy.CurrentProfile; 
    Application:= CreateOLEObject ('HNetCfg.FwAuthorizedApplication'); 
    Application.ProcessImageFileName:= Executable; 
    Application.Name:= Caption; 
    Application.Scope:= FW_SCOPE_ALL; 
    Application.IpVersion:= FW_IP_VERSION_ANY; 
    Application.Enabled:= True; 
    CurrentProfile.AuthorizedApplications.Add (Application); 
end; 

によるものでは、Windows 7上で、ですが、それが唯一の公共としての例外を追加したと実装コードのこの塊を持っており、プライベートとしてあなただけの公開に設定すると

enter image description here

ここで REDで囲んだ、私のプログラムは、FT経由で私のホストへのアクセスに問題があります見ることができないようPの接続、私のプログラムは役に立たないレンダリング。 この問題はWindows Vista/7にのみ特に発生します。 XPでは、現在の設定は正常に動作します。

ヒントや有用な情報がある場合は、それらを共有してください。

答えて

8

Windows Vistaからは、新しいファイアウォール機能にアクセスするには、INetFwPolicy2およびINetFwRuleインターフェイスを使用する必要があります。

パブリックプロファイルとプライベートプロファイルで新しいルールを追加するこのサンプルを試してみてください。

procedure AddExceptionToFirewall(Const Caption, Executable: String); 
const 
NET_FW_PROFILE2_DOMAIN = 1; 
NET_FW_PROFILE2_PRIVATE = 2; 
NET_FW_PROFILE2_PUBLIC = 4; 

NET_FW_IP_PROTOCOL_TCP = 6; 
NET_FW_ACTION_ALLOW = 1; 
var 
    fwPolicy2  : OleVariant; 
    RulesObject : OleVariant; 
    Profile  : Integer; 
    NewRule  : OleVariant; 
begin 
    Profile    := NET_FW_PROFILE2_PRIVATE OR NET_FW_PROFILE2_PUBLIC; 
    fwPolicy2   := CreateOleObject('HNetCfg.FwPolicy2'); 
    RulesObject   := fwPolicy2.Rules; 
    NewRule    := CreateOleObject('HNetCfg.FWRule'); 
    NewRule.Name  := Caption; 
    NewRule.Description := Caption; 
    NewRule.Applicationname := Executable; 
    NewRule.Protocol := NET_FW_IP_PROTOCOL_TCP; 
    NewRule.Enabled := TRUE; 
    NewRule.Profiles := Profile; 
    NewRule.Action := NET_FW_ACTION_ALLOW; 
    RulesObject.Add(NewRule); 
end; 
+1

なぜdownvoteですか? – RRUZ

+0

うわーはうまくいきますが、Fire Wallのプライベートポリシーとパブリックポリシーを手動で削除することもできます! ありがとうRRUZ! – ziGi

+0

CreateOleObjectがnilを返す場合はどうなりますか? btwは、それができることができないと返すことができないドキュメンテーションを持つCreateOleObjectのMSDNページですか? –

関連する問題