我想实现通过WMI来修改计算机的IP配置,在我自己的机器上都可以调试成功,但是换到另一台机器(有.Net Framework 1.1 没有VS.Net2003)后,就提示"将 COM 对象与其基础 RCW 分开后不能再使用该对象",听人说是因为离开了vs.net环境的原因,请哪位高手帮我看看该如何改才能让程序正常啊我发现问题就出在foreach()语句中,不会弄了,帮我改下吧try
{
ConnectionOptions Conn =new ConnectionOptions();
ManagementScope Ms = new ManagementScope ( "\\\\127.0.0.1\\root\\cimv2" , Conn )
ManagementObjectSearcher query = new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = 'TRUE'") ;
ManagementObjectCollection queryCollection = query.Get();
ManagementBaseObject iObj = null;
ManagementBaseObject oObj = null;
string[] strDefaultGateway = new string[]{this.DefaultGateway};
string[] strIPAddress = new string[]{this.IPaddress};
string[] strSubnetMask = new string[]{this.SubnetMask};
string[] strFirstDNS = new string[]{this.FirstDNS,this.SecondDNS};
if (queryCollection.Count<=0)
{
label3.Text+="没找到本机上的网卡,无法进行IP配置!\n";
return;
}
foreach( ManagementObject MO in queryCollection )
{
iObj = MO.GetMethodParameters( "EnableStatic" );
iObj["IPAddress"] = strIPAddress;
iObj["SubnetMask"] = strSubnetMask;
oObj = MO.InvokeMethod("EnableStatic", iObj, null);
iObj = MO.GetMethodParameters( "SetGateways" );
iObj["DefaultIPGateway"] = strDefaultGateway;
oObj = MO.InvokeMethod("SetGateways", iObj, null);
iObj = MO.GetMethodParameters("SetDNSServerSearchOrder");
iObj["DNSServerSearchOrder"] = strFirstDNS;
oObj = MO.InvokeMethod("SetDNSServerSearchOrder", iObj, null);
}
//效验修改
string strResultIP="";
System.Net.IPAddress[] addressList = Dns.GetHostByName(Dns.GetHostName()).AddressList;
for (int i = 0; i < addressList.Length; i ++)
{
strResultIP += addressList[i].ToString();
} if(strResultIP==this.IPaddress)
{
RegIP=true;
label3.Text+="修改计算机IP配置成功!("+this.IPaddress+")\n";
}
else
{
label3.Text+="修改计算机IP配置失败!\n";
}
}
catch(Exception ex)
{
label3.Text+="调用WMI修改计算机IP配置时出错!\n";
}
{
ConnectionOptions Conn =new ConnectionOptions();
ManagementScope Ms = new ManagementScope ( "\\\\127.0.0.1\\root\\cimv2" , Conn )
ManagementObjectSearcher query = new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = 'TRUE'") ;
ManagementObjectCollection queryCollection = query.Get();
ManagementBaseObject iObj = null;
ManagementBaseObject oObj = null;
string[] strDefaultGateway = new string[]{this.DefaultGateway};
string[] strIPAddress = new string[]{this.IPaddress};
string[] strSubnetMask = new string[]{this.SubnetMask};
string[] strFirstDNS = new string[]{this.FirstDNS,this.SecondDNS};
if (queryCollection.Count<=0)
{
label3.Text+="没找到本机上的网卡,无法进行IP配置!\n";
return;
}
foreach( ManagementObject MO in queryCollection )
{
iObj = MO.GetMethodParameters( "EnableStatic" );
iObj["IPAddress"] = strIPAddress;
iObj["SubnetMask"] = strSubnetMask;
oObj = MO.InvokeMethod("EnableStatic", iObj, null);
iObj = MO.GetMethodParameters( "SetGateways" );
iObj["DefaultIPGateway"] = strDefaultGateway;
oObj = MO.InvokeMethod("SetGateways", iObj, null);
iObj = MO.GetMethodParameters("SetDNSServerSearchOrder");
iObj["DNSServerSearchOrder"] = strFirstDNS;
oObj = MO.InvokeMethod("SetDNSServerSearchOrder", iObj, null);
}
//效验修改
string strResultIP="";
System.Net.IPAddress[] addressList = Dns.GetHostByName(Dns.GetHostName()).AddressList;
for (int i = 0; i < addressList.Length; i ++)
{
strResultIP += addressList[i].ToString();
} if(strResultIP==this.IPaddress)
{
RegIP=true;
label3.Text+="修改计算机IP配置成功!("+this.IPaddress+")\n";
}
else
{
label3.Text+="修改计算机IP配置失败!\n";
}
}
catch(Exception ex)
{
label3.Text+="调用WMI修改计算机IP配置时出错!\n";
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货