C# 使用WMI EnableStatic方法时出现问题

C# 使用WMI EnableStatic方法时出现问题,c#,wmi,C#,Wmi,我正在尝试创建一个工具,将动态DHCP提供的IPv4地址、网关和dns设置转换为静态配置。我曾尝试使用WMI来解决这个难题,但我有一个无法解决的问题 应用程序完成,DNS和网关已配置,但EnableStatic方法(用于设置IP地址和子网)未成功,这意味着即使已设置默认网关,IP仍从DHCP接收(带灰色字段)。我该如何解决这个问题 EnableStatic的返回值为70(无效IP地址)。奇怪的是,输入参数与我2秒前从NIC提取的参数相同 以下是代码(GUI除外): 有什么想法吗?您是否也在输入地

我正在尝试创建一个工具,将动态DHCP提供的IPv4地址、网关和dns设置转换为静态配置。我曾尝试使用WMI来解决这个难题,但我有一个无法解决的问题

应用程序完成,DNS和网关已配置,但
EnableStatic
方法(用于设置IP地址和子网)未成功,这意味着即使已设置默认网关,IP仍从DHCP接收(带灰色字段)。我该如何解决这个问题

EnableStatic的返回值为70(无效IP地址)。奇怪的是,输入参数与我2秒前从NIC提取的参数相同

以下是代码(GUI除外):


有什么想法吗?

您是否也在输入地址?只是在玩PowerShell,它似乎不喜欢它们。也许您可以发布调试时输入的实际值,这会有很大帮助。也可以尝试静态输入一些值,如:

new string[]{"192.168.0.1"}, new string[] {"255.255.255.255"}

此外,除非你真的需要C语言和GUI,否则你可能想考虑使用PultS壳(当然,它是被安装的),因为WMI在那里操作要简单得多(遗憾的是,你仍然有学习曲线)。 这只是如何使用PowerShell的一个示例,您至少可以将其用于一些测试:

Get-WmiObject Win32_NetworkAdapterConfiguration
然后获取适配器的索引,然后运行,但替换索引号:

$obj = Get-WmiObject Win32_NetworkAdapterConfiguration | where {$_.Index -eq 1}
$obj.EnableStatic("192.168.0.1", "255.255.255.0")
要获取方法参数,只需运行:

$obj.EnableStatic
它将返回:

MemberType          : Method
OverloadDefinitions : {System.Management.ManagementBaseObject EnableStatic(System.String[]IPAddress, System.String[] SubnetMask)}
TypeNameOfValue     : System.Management.Automation.PSMethod
Value               : System.Management.ManagementBaseObject EnableStatic(System.String[]IPAddress, System.String[] SubnetMask)
Name                : EnableStatic
IsInstance          : True

对于那些可能在搜索中偶然发现这一点的人,另一个提示

如果您当前的IP地址是DHCP分配的,并且EnableStatic()返回2147944122或2147944117错误代码,请验证Windows中的DHCP服务(DHCP客户端)是否已启用和启动

我发现使用EnableStatic()从一个静态地址切换到另一个地址可以正常工作。但是如果您有一个动态地址,并且DHCP服务被禁用(可能是由于安全原因),那么EnableStatic()将无法工作


将此解决方案添加到internet,以防将来节省某人的时间。

早就应该这样做了。我很久以前就放弃了,但现在当我在PS上练习时,我也花时间测试了C#app。IP6似乎有些东西,所以我使用了
newIP[“IPAddress”]=newstring[]{IPAddress[0]}和类似的子网仅获取ipv4设置。多个IP地址无论如何都不太可能被使用。Great catch=)IPAddresses属性()的描述是:“此属性可以包含IPv6地址或IPv4地址”。现在,当您查询它时,它似乎同时包含v4和v6地址,但它可能只在您尝试更改它时才起作用(使用例如EnableStatic()。如果您使用混合地址和EnableStatic(),我自己也注意到错误70。
MemberType          : Method
OverloadDefinitions : {System.Management.ManagementBaseObject EnableStatic(System.String[]IPAddress, System.String[] SubnetMask)}
TypeNameOfValue     : System.Management.Automation.PSMethod
Value               : System.Management.ManagementBaseObject EnableStatic(System.String[]IPAddress, System.String[] SubnetMask)
Name                : EnableStatic
IsInstance          : True