IPアドレスなどを静的に設定するか、自動的に設定する(DHCP)ことができる簡単なネットワーク構成ツールを、すべてWMIを使用して作成しようとしています。
残念ながら、アドレスの設定は静的に1回だけ機能します。したがって、以下のテスト関数を1回実行すると、すべてが完全に機能します(// DYNAMICのブレークポイントを忘れないでください!)。ただし、2回目に、ネットワークアダプタのコントロールパネルのプロパティページで結果を確認すると、IPアドレスとサブネットマスクは空のままになります。もちろん、スローされる例外はなく、メソッド呼び出しの結果は常にゼロ(0)です。コードは、2台の異なる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[] { });
}