繁体   English   中英

C# WMI SetMTU System.ManagementException

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM