1
我即將編寫一個簡單的網絡配置工具,它可以靜態設置IP地址等,或者通過WMI自動設置(DHCP)。爲什麼通過WMI應用靜態IP地址只能工作一次?
不幸的是,靜態設置地址只能工作一次!所以當你運行下面的測試函數時,一切都很完美(不要忘記// DYNAMIC中的斷點!)。但在第二次,當您檢查網絡適配器的控制面板的屬性頁中的結果時,IP地址和子網掩碼仍爲空!當然,沒有拋出異常,並且方法調用的結果始終爲零(0)。該代碼在兩臺不同的Windows 7機器上進行了測試,當然還有管理員。
void Test()
{
// find management object
ManagementClass networkManagementClass = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection networkManagement = networkManagementClass.GetInstances();
ManagementObject adapter = null;
foreach (ManagementObject mo in networkManagement)
{
if ((bool)mo["IPEnabled"] && (string)mo["Caption"] == "[00000012] Intel(R) 82577LM Gigabit Network Connection")
{
adapter = mo;
break;
}
}
// STATIC
var val = adapter.InvokeMethod("EnableStatic", new object[] {
new string[] { "192.168.1.99" },
new string[] { "255.255.255.0" }
});
val = adapter.InvokeMethod("SetGateways", new object[] {
new string[] { "192.168.1.254" },
new UInt16[] { 1 }
});
val = adapter.InvokeMethod("SetDNSServerSearchOrder", new object[] {
new string[] { "192.168.1.254" }
});
// DYNAMIC
adapter.InvokeMethod("SetDNSServerSearchOrder", new object[] { new string[0] });
adapter.InvokeMethod("EnableDHCP", new object[] { });
}
btw:[此MSDN論壇主題]中的一篇文章(http://social.msdn.microsoft.com/Forums/en/csharpgeneral/thread/2ef93007-6718-468e-8399-c6b9c5f461aa)幫助我想出了這個... – nepa 2012-08-10 17:15:42