首页 > 解决方案 > 访问被拒绝。(来自 HRESULT 的异常:0x80070005 (E_ACCESSDENIED))'防火墙 INetFwPolicy2

问题描述

访问被拒绝。

        private  void MakeRule(string IP, int Protocole, NET_FW_RULE_DIRECTION_ ruleDirection, string ruleName)
        {
            Type tNetFwPolicy2 = Type.GetTypeFromProgID("HNetCfg.FwPolicy2");
            INetFwPolicy2 fwPolicy2 = (INetFwPolicy2)Activator.CreateInstance(tNetFwPolicy2);
            var currentProfiles = fwPolicy2.CurrentProfileTypes;

            

            // Let's create a new rule
            INetFwRule2 Rule = (INetFwRule2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FWRule"));
            Rule.Enabled = true;
            

            NET_FW_RULE_DIRECTION_ direction = ruleDirection;
            Rule.Direction = direction; //Inbound
            Rule.Action = NET_FW_ACTION_.NET_FW_ACTION_BLOCK;
            Rule.Profiles = currentProfiles;

            Rule.Protocol = protNumber; // ANY/TCP/UDP

            try
            {
                Rule.RemoteAddresses = str;
            }
            catch (Exception)
            {
                MessageBox.Show("Can't add Rules. Maybe a Format failure?");
            }

            //Rule.LocalPorts = "81"; //Port 81

            //Name of rule
            Rule.Name = ruleName;
            
            // ...//
            //Rule.Profiles = (int)NET_FW_PROFILE_TYPE_.NET_FW_PROFILE_TYPE_MAX;

            // Now add the rule
            INetFwPolicy2 firewallPolicy = (INetFwPolicy2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwPolicy2"));
            try
            {
                firewallPolicy.Rules.Add(Rule);
            }
            catch (Exception ex)
            {
                throw ex;
            }

        }

标签: c#.netvisual-studio

解决方案


Testabc 用户具有管理员权限。

        //Run EXTERNAL APP AS AN ADMIN

        var pass = new SecureString();
         pass.AppendChar('t');
         pass.AppendChar('e');
         pass.AppendChar('s');
         pass.AppendChar('t');
         

        var ps1File = @"C:\Users\testabc\Desktop\LT_Admin.ps1";
        ProcessStartInfo processAdmin;
        processAdmin = new ProcessStartInfo();
        processAdmin.UseShellExecute = false;
        processAdmin.CreateNoWindow = true;
        processAdmin.WindowStyle=System.Diagnostics.ProcessWindowStyle.Hidden;
        processAdmin.Password = pass;
        processAdmin.UserName = "testabc";
        processAdmin.Domain = "soft";
        processAdmin.FileName = @"C:\windows\system32\windowspowershell\v1.0\powershell.exe";
        processAdmin.Arguments = $"-NoProfile -ExecutionPolicy unrestricted -file \"{ps1File}\"";
        processAdmin.RedirectStandardOutput = true;           
        Process.Start(processAdmin);

在 ps1File 我有这个代码

Start-Process -FilePath "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" -Verb RunAs

完美运行...


推荐阅读