2017-06-02 7 views
8

के लिए फ़ायरवॉल नियम जोड़ें, मैंने नियम जोड़ने के लिए firewallAPI.dll का उपयोग करने का प्रयास किया। यह calc.exe (या कुछ अन्य फ़ाइलें) वर्णित bellow के रूप में के लिए ठीक काम करता है, लेकिन निम्न अपवादों के साथ msdtc.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 नहीं)?

उत्तर

8

प्रोजेक्ट> गुण> टैब बनाएं, "32-बिट पसंद करें" चेकबॉक्स को अनचेक करें। आप इसे पसंद नहीं करते हैं, msdtc.exe का 32-बिट संस्करण नहीं है।

फ़ाइल सिस्टम रीडायरेक्टर का कारण फ़ाइल नोटॉटफॉउंडएक्सप्शन this MSDN article में अच्छी तरह से समझाया गया है।

संबंधित मुद्दे