0

我正在尝试在本地更改网络适配器的一些配置。我必须使用非管理用户,但当我尝试调用方法时,我只得到返回值“91”,它代表“拒绝访问”。可以为“EnableStatic”方法设置权限,但“SetDNSServerSearchOrder”根本不起作用。它总是返回“拒绝访问”。我什至无法禁用网络适配器(在 Win32_NetworkAdapter 中)。管理员用户一切正常。由于我对“EnableStatic”有同样的问题,我很确定,一定有办法让它与其他方法一起工作。我在 wmimgmt.msc 中为所有命名空间设置了安全选项,我在 dcomcnfg 中设置了限制,我在注册表中为 tcpip 授予了权限,在分布式 com-users、性能组、网络配置操作员中添加了用户,但没有办法让它工作。当我的工具运行时,我认识到没有 dns ip。因此,尽管该方法返回“拒绝访问”,但有些事情发生了变化。有任何想法吗?自三周以来,即使是微软也无法帮助我。当我以管理员身份登录时,该工具运行没有任何问题。这是我的 C# 代码:(对于我的书面英语中的一些错误,我深表歉意;))当我以管理员身份登录时,该工具运行没有任何问题。这是我的 C# 代码:(对于我的书面英语中的一些错误,我深表歉意;))当我以管理员身份登录时,该工具运行没有任何问题。这是我的 C# 代码:(对于我的书面英语中的一些错误,我深表歉意;))

    private static ManagementScope CreateScope(string strScope)
    {
        ManagementScope scope = new ManagementScope(strScope);
        scope.Options.Impersonation = ImpersonationLevel.Impersonate;
        scope.Options.Authentication = AuthenticationLevel.Packet;
        return scope;
    }

    public static void SetIP(String strScope, String strQuery, string IPAddress, string SubnetMask, string Gateway, string DNSServer1, string DNSServer2)
    {
        ManagementScope scope = CreateScope(strScope);
        SelectQuery query = new SelectQuery(strQuery);
        Collection<object> objCol = new Collection<object>();
        scope.Connect();
        ManagementObjectCollection mobjCol = null;
        using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query))
        {
            mobjCol = searcher.Get();
        }
        foreach (ManagementObject objMO in mobjCol)
        {
            try
            {
                ManagementBaseObject objNewIP = null;
                ManagementBaseObject objSetIP = null;
                ManagementBaseObject objNewGate = null;
                ManagementBaseObject objNewDNS = null;

                objNewIP = objMO.GetMethodParameters("EnableStatic");
                objNewGate = objMO.GetMethodParameters("SetGateways");
                objNewDNS = objMO.GetMethodParameters("SetDNSServerSearchOrder");

                //Set DefaultGateway
                objNewGate["DefaultIPGateway"] = new string[] { Gateway };
                objNewGate["GatewayCostMetric"] = new int[] { 1 };

                //Set IPAddress and Subnet Mask
                objNewIP["IPAddress"] = new string[] { IPAddress };
                objNewIP["SubnetMask"] = new string[] { SubnetMask };

                //Set DNS servers
                objNewDNS["DNSServerSearchOrder"] = new string[] { DNSServer1, DNSServer2 };

                //Invoke all changes
                objSetIP = objMO.InvokeMethod("EnableStatic", objNewIP, null);
                MessageBox.Show("EnableStatic: " + objSetIP["ReturnValue"].ToString());
                objSetIP = objMO.InvokeMethod("SetGateways", objNewGate, null);
                MessageBox.Show("SetGateways: " + objSetIP["ReturnValue"].ToString());
                objSetIP = objMO.InvokeMethod("SetDNSServerSearchOrder", objNewDNS,null);                                                               
                MessageBox.Show("SetDNSServerSearchOrder: " + objSetIP["ReturnValue"].ToString());


            }
            catch (ManagementException ex)
            {
                MessageBox.Show("Unable to Set IP : " + ex.Message);
            }
        }
    }
4

1 回答 1

0

非管理用户需要权限才能运行 WMI 查询。您可以使用 WMI 控件 [在 ServerManager / 配置或计算机管理 / 服务和应用程序下] 设置相关权限参考:http ://technet.microsoft.com/en-us/library/cc775497(v=ws.10).aspx

尝试向 CIMV2 命名空间中的非管理员用户提供执行方法、启用帐户和提供者写入权限。

于 2012-08-01T00:54:50.277 回答