[英]C# WMI SetMTU System.ManagementException
我们正在开发一个程序来配置一些 NIC。 我们必须更改 IP 地址、子网掩码和 MTU。 除了 MTU 声明外,一切都很顺利:
public void SetMTU()
{
ManagementClass objMC = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection objMOC = objMC.GetInstances();
foreach (ManagementObject objMO in objMOC)
{
if (networkadapterID == (String)objMO["SettingID"])
{
ManagementBaseObject setMTU;
ManagementBaseObject newMTU = objMO.GetMethodParameters("SetMTU");
Int32 test = 9216;
newMTU["MTU"] = test;
setMTU = objMO.InvokeMethod("SetMTU", newMTU, null);
}
}
}
给出了正确的 NIC ID。 其他 WMI 操作成功,但我们坚持使用错误消息:System.Management.ManagementException:“Die Methode ist ungültig。”
(System.Management.ManagementException:“方法无效。”)
我们还尝试将“test”用作字符串或 uint32(因为 microsoft 文档说它是 uint32),还有:
newMTU["MTU"] = new (u)int[] { MTU };
但它也不起作用。 同时,我们不知道如何解决这个问题。
我很感激每一个想法。
感谢您的帮助,祝您有美好的一天,亚历克斯
编辑:读取 MTU 的代码应该是(您必须告诉这部分一个 NetworkID,这样您就不会读取每个 NIC 的值,您可以在注册表中找到它,但您应该能够删除 if 部分):
ManagementClass objMC = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection objMOC = objMC.GetInstances();
foreach (ManagementObject objMO in objMOC)
{
if (networkadapterID == (String)objMO["SettingID"])
{
MessageBox.Show(Convert.ToString(objMO["MTU"]) + ": " + Convert.ToString(objMO["SettingID"]));
}
}
到目前为止,我们还没有解决问题,但我们现在检查操作系统是否为 Windows 10,我们将使用以下命令启动 PowerShell 任务:
Get-NetAdapterAdvancedProperty -Name 'NICName' -DisplayName 'Jumbo-Rahmen' | Set-NetAdapterAdvancedProperty -RegistryValue 'MTUsize';
Jumbo-Rahmen 应该是英语操作系统上的 JumboPacket
如果操作系统不是 Windows 10,将要求用户手动更改 MTU
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.