为分布式事务协调器 (msdtc.exe) 添加防火墙规则

Posted

技术标签:

【中文标题】为分布式事务协调器 (msdtc.exe) 添加防火墙规则【英文标题】:Add a firewall rule for Distributed Transaction Coordinator (msdtc.exe) 【发布时间】:2017-11-04 10:17:56 【问题描述】:

我尝试使用firewallAPI.dll 添加规则。它适用于如下所述的 calc.exe(或其他一些文件),但对于 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)?

【问题讨论】:

【参考方案1】:

Project > Properties > Build 选项卡,取消勾选“Prefer 32-bit”复选框。你不喜欢它,没有 32 位版本的 msdtc.exe。

为什么文件系统重定向器导致 FileNotFoundException 在this MSDN article 中有很好的解释。

【讨论】:

以上是关于为分布式事务协调器 (msdtc.exe) 添加防火墙规则的主要内容,如果未能解决你的问题,请参考以下文章

msdtc

MSDTC不可用解决办法

SQL Server 开启DTC分布式事务

分布式事务- 三阶段协议

使用TransactionScope做分布式事务协调

SqlServer & Windows 可更新订阅立即更新启用分布式事务协调器(MSDTC)