2017-06-02 1 views
8

firewallAPI.dllを使用してルールを追加しようとしました。それは説明怒鳴るようCALC.EXE(またはいくつかの他のファイル)のために正常に動作しますが、以下の例外を除いてmsdtc.exeのために失敗します。Distributed Transaction Coordinator(msdtc.exe)のファイアウォールルールを追加します

System.IO.FileNotFoundException:「システムは指定されたファイル を見つけることができません。 (HRESULTからの例外:0x80070002が)」

例:

static void Main(string[] args) 
{ 
    var manager = GetFirewallManager(); 
    if (manager.LocalPolicy.CurrentProfile.FirewallEnabled) 
    { 
     var path = @"C:\Windows\System32\calc.exe"; 
     //var path = @"C:\Windows\System32\msdtc.exe"; // System.IO.FileNotFoundException: 'The system cannot find the file specified. 
     AuthorizeApplication("Test", path, NET_FW_SCOPE_.NET_FW_SCOPE_ALL, NET_FW_IP_VERSION_.NET_FW_IP_VERSION_ANY); 
    } 
} 

private const string CLSID_FIREWALL_MANAGER = 
    "{304CE942-6E39-40D8-943A-B913C40C9CD4}"; 

private static NetFwTypeLib.INetFwMgr GetFirewallManager() 
{ 
    Type objectType = Type.GetTypeFromCLSID(
     new Guid(CLSID_FIREWALL_MANAGER)); 
    return Activator.CreateInstance(objectType) 
     as NetFwTypeLib.INetFwMgr; 
} 

private const string PROGID_AUTHORIZED_APPLICATION = 
    "HNetCfg.FwAuthorizedApplication"; 
public static bool AuthorizeApplication(string title, string applicationPath, 
    NET_FW_SCOPE_ scope, NET_FW_IP_VERSION_ ipVersion) 
{ 
    // Create the type from prog id 
    Type type = Type.GetTypeFromProgID(PROGID_AUTHORIZED_APPLICATION); 
    INetFwAuthorizedApplication auth = Activator.CreateInstance(type) 
     as INetFwAuthorizedApplication; 
    auth.Name = title; 
    auth.ProcessImageFileName = applicationPath; 
    auth.Scope = scope; 
    auth.IpVersion = ipVersion; 
    auth.Enabled = true; 

    INetFwMgr manager = GetFirewallManager(); 
    manager.LocalPolicy.CurrentProfile.AuthorizedApplications.Add(auth); 
    return true; 
} 

注:私はフォルダをチェックし、ファイルが適切に配置されて参照... 誰もが分散のファイアウォールルールを追加するのに役立つ可能性があり取引コーディネーター?ファイアウォール(msdtc.exeではなく)に別のファイルを追加しようとする必要がありますか?

答えて

8

プロジェクト>プロパティ> [ビルド]タブで、[32ビット優先]チェックボックスをオフにします。あなたはそれを好きではない、msdtc.exeの32ビット版はありません。

なぜFile SystemリダイレクタがFileNotFoundExceptionを引き起こしたのかは、this MSDN articleでよく説明されています。

関連する問題