ネットワークアダプタの静的IPを変更するために現在使用しているコードがいくつかあります。Windows XP 32ビットマシン(物理マシンとVMの両方)で実行する場合、IPアドレスを設定するときにわずかな一時停止(約1秒)がありますが、IPが変更されているように見えます。
Windows 7 64ビットマシンで実行すると、IPアドレスの変更に失敗します。変更を試みても一時停止はなく、例外はスローされません。
私はかなりの量のグーグルを実行しました、そしてほとんどのアドバイスは単に管理者として実行することであるようです。実行可能ファイルを右クリックして[管理者として実行]を選択し、ショートカットを作成して管理者として実行するように設定し、マニフェストファイルを更新しようとしました(管理者権限を要求します)起動しますが、IPアドレスは変更されません。)
誰かアドバイスはありますか?
コードは次のとおりです。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Management; // You will need to add a reference for System.Management!
namespace NetAdapt
{
class Program
{
static void Main(string[] args)
{
// First display all network adaptors
DisplayNetworkAdaptors(-1);
// Now try to set static IP, subnet mask and default gateway for adaptor with
// index of 1 (may be different for your machine!)
SetIP(1,
new string[] { "10.10.1.222" },
new string[] { "255.255.255.0" },
new string[] { "10.10.1.10" });
// Now display network adaptor settings for adaptor 1 (may be different for your machine!)
DisplayNetworkAdaptors(1);
Console.ReadLine();
}
private static void SetIP(int index, string[] newIPAddress, string[] newSubnetMask, string[] newGateway)
{
ManagementClass objMC = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection objMOC = objMC.GetInstances();
foreach (ManagementObject objMO in objMOC)
{
if (!(bool)objMO["IPEnabled"]) continue;
try
{
//Only change for device specified
if ((uint)objMO["Index"] == index)
{
ManagementBaseObject objNewIP = null;
ManagementBaseObject objSetIP = null;
ManagementBaseObject objNewGate = null;
objNewIP = objMO.GetMethodParameters("EnableStatic");
objNewGate = objMO.GetMethodParameters("SetGateways");
objNewGate["DefaultIPGateway"] = newGateway;
objNewIP["IPAddress"] = newIPAddress;
objNewIP["SubnetMask"] = newSubnetMask;
objSetIP = objMO.InvokeMethod("EnableStatic", objNewIP, null);
objSetIP = objMO.InvokeMethod("SetGateways", objNewGate, null);
Console.WriteLine("Successfully changed IP!");
}
}
catch (Exception ex)
{
Console.WriteLine("Exception setting IP: " + ex.Message);
}
}
}
private static void DisplayNetworkAdaptors(int index)
{
ManagementClass objMC = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection objMOC = objMC.GetInstances();
foreach (ManagementObject objMO in objMOC)
{
try
{
// TCP enabled NICs only
if (!(bool)objMO["IPEnabled"]) continue;
// If index is -1 then display all network adaptors, otherwise only
// display adaptor whose index matches parameter
if ((index != -1) && ((uint)objMO["Index"] != index)) continue;
Console.WriteLine("Caption : " + (string)objMO["Caption"]);
string[] defaultGateways=(string[])objMO["DefaultIPGateway"];
if (defaultGateways != null)
{
for (int x = 0; x < defaultGateways.Count(); x++)
{
Console.WriteLine(string.Format("DefaultIPGateway{0} : {1}", x, defaultGateways[x]));
}
}
else
{
Console.WriteLine("DefaultIPGateway : NULL");
}
Console.WriteLine("Description : " + (string)objMO["Description"]);
Console.WriteLine("DHCPEnabled : " + (bool)objMO["DHCPEnabled"]);
Console.WriteLine("DHCPServer : " + (string)objMO["DHCPServer"]);
Console.WriteLine("Index : " + (uint)objMO["Index"]);
string[] ipAddresses = (string[])objMO["IPAddress"];
if (ipAddresses != null)
{
for (int x = 0; x < ipAddresses.Count(); x++)
{
Console.WriteLine(string.Format("IPAddress{0} : {1}", x, ipAddresses[x]));
}
}
else
{
Console.WriteLine("IPAddress : NULL");
}
Console.WriteLine("IPEnabled : " + (bool)objMO["IPEnabled"]);
string[] ipSubnets = (string[])objMO["IPSubnet"];
if (ipSubnets != null)
{
for (int x = 0; x < ipSubnets.Count(); x++)
{
Console.WriteLine(string.Format("IPSubnet{0} : {1}", x, ipSubnets[x]));
}
}
else
{
Console.WriteLine("IPSubnet : NULL");
}
Console.WriteLine("MACAddress : " + (string)objMO["MACAddress"]);
Console.WriteLine();
}
catch (Exception ex)
{
Console.WriteLine("Exception getting network adaptors: " + ex.Message);
}
}
}
}
}