C# WMI Win32“网络适配器配置”;EnableStatic“;调用失败,返回结果为0x80041003
我无法为连接到我的系统并播发网络适配器的设备分配静态IP地址。每当我使用IP和子网掩码在设备上调用EnableStatic时,它都会返回错误代码0x80041003,我认为这意味着“访问被拒绝”。我可以在Windows中更改IP地址,而无需提升 我用来设置IP地址的代码如下所示:C# WMI Win32“网络适配器配置”;EnableStatic“;调用失败,返回结果为0x80041003,c#,wmi,C#,Wmi,我无法为连接到我的系统并播发网络适配器的设备分配静态IP地址。每当我使用IP和子网掩码在设备上调用EnableStatic时,它都会返回错误代码0x80041003,我认为这意味着“访问被拒绝”。我可以在Windows中更改IP地址,而无需提升 我用来设置IP地址的代码如下所示: /// <summary> /// Set's a new IP Address and subnet mask for the adapter with the given descriptio
/// <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;
}
}
}
//
///设置具有给定描述的适配器的新IP地址和子网掩码。
///
///用于标识适配器的描述字符串。
///IP地址。
///子掩码IP地址
公共静态void SetIP(字符串描述、字符串ip、字符串掩码)
{
ManagementClass findAdapters=
新的管理类(“Win32_网络适配器配置”);
ManagementObjectCollection适配器=findAdapters.GetInstances();
foreach(适配器中的ManagementObject适配器)
{
字符串名称=(字符串)适配器[“说明”];
如果(名称!=说明)
{
继续;
}
尝试
{
ManagementBaseObject新IP=
adapter.GetMethodParameters(“EnableStatic”);
newIP[“IPAddress”]=新字符串[]{ip};
newIP[“子网掩码”]=新字符串[]{mask};
ManagementBaseObject设置IP=
InvokeMethod(“EnableStatic”,newIP,null);
UInt32结果=(UInt32)(setIP[“returnValue”]);
}
捕获(例外)
{
投掷;
}
}
}
我在互联网上四处寻找解决方案。看起来最有可能的是,在一切都启动并运行之前,我需要做一些类似于CoInitializeSecurity的事情。但我觉得这很奇怪。我使用的是WMI名称空间,如果WMI以某种方式依赖于这样的东西,那么它肯定也应该在名称空间中吗
我在这里遗漏了一些东西
顺便说一句,在域上以用户身份运行Windows 7,但如果有帮助,我是本地管理员 您需要以管理员身份运行 如果您想避免UAC提示,可以执行以下操作 创建并安装一个能够更改IP的服务,并以管理员身份运行
必要时将新IP告知服务部门完全正确。我们昨天设法解决了这个问题。遗憾的是,没有时间为这个版本编写服务,但我们将在下一个版本中编写服务。