WMI Win32_NetworkAdapterConfiguration“EnableStatic”调用失败,返回结果为0x80041003

时间:2012-05-16 15:11:36

标签: c# wmi

我无法为连接到系统的设备分配静态IP地址并通告网络适配器。每当我在设备上调用EnableStatic时,使用IP和子网掩码,它将返回错误代码0x80041003,我相信这意味着“拒绝访问”。我可以在Windows中更改IP地址而无需提升。

我用来设置IP地址的代码如下所示:

 /// <summary>
    /// Set's a new IP Address and subnet mask for the adapter with the given description.
    /// </summary>
    /// <param name="description">Description string used to ID the adapter.</param>
    /// <param name="ip_address">The IP Address.</param>
    /// <param name="subnet_mask">The Submask IP Address</param>
    public static void SetIP(string description, string ip, string mask)
    {
        ManagementClass findAdapters = 
                                    new ManagementClass("Win32_NetworkAdapterConfiguration");
        ManagementObjectCollection adapters = findAdapters.GetInstances();

        foreach (ManagementObject adapter in adapters)
        {
            string name = (string)adapter["Description"];

            if (name != description)
            {
                continue;
            }

            try
            {
                ManagementBaseObject newIP = 
                                           adapter.GetMethodParameters("EnableStatic");

                newIP["IPAddress"] = new string[] { ip };
                newIP["SubnetMask"] = new string[] { mask };

                ManagementBaseObject setIP = 
                                            adapter.InvokeMethod("EnableStatic", newIP, null);

                UInt32 result = (UInt32)(setIP["returnValue"]);
            }
            catch (Exception)
            {
                throw;
            }                
        }
    }

我在互联网上寻找解决方案。看起来最有可能的是我需要在所有东西启动和运行之前做一些像CoInitializeSecurity这样的事情。但这对我来说似乎很奇怪。我正在使用WMI命名空间,如果WMI以某种方式依赖于这样的东西,肯定也应该在命名空间中?

我在这里缺少一些东西......

btw在域上以用户身份运行Windows 7,但如果有帮助则是本地管理员!

1 个答案:

答案 0 :(得分:1)

您需要以管理员身份运行。

如果您想避免UAC提示,可以执行类似

的操作

make&amp;安装一项能够更改IP&amp;以管理员身份运行

根据需要告知服务新IP