I use vs2008, winxp, in LAN network with Win2003 servers.
I want a application installed in winxp for detect if win2003 machines is online or offline , and if offline wh
I would go for the .NET System.Net.NetworkInformation.Ping
, because it is quite flexible, you have the possibility of doing it asynchronously and I find it more intuitive than WMI (I have used both and use WMI only if I need to get more info from the remote machine than just the ping). But this is just a personal opinion.
Not sure exactly what the question is for, but for what it's worth, I have a test framework that runs tests on VMs and needs to reboot them. After rebooting the box (via WMI) I wait for a ping fail, then a ping success (using System.Net.NetworkInformation.Ping
as mentioned by others) then I need to wait until Windows is ready:
private const int RpcServerUnavailable = unchecked((int)0x800706BA);
private const int RpcCallCancelled = unchecked((int)0x80010002);
public bool WindowsUp(string hostName)
{
string adsiPath = string.Format(@"\\{0}\root\cimv2", hostName);
ManagementScope scope = new ManagementScope(adsiPath);
ManagementPath osPath = new ManagementPath("Win32_OperatingSystem");
ManagementClass os = new ManagementClass(scope, osPath, null);
ManagementObjectCollection instances = null;
try
{
instances = os.GetInstances();
return true;
}
catch (COMException exception)
{
if (exception.ErrorCode == RpcServerUnavailable || exception.ErrorCode == RpcCallCancelled)
{
return false;
}
throw;
}
finally
{
if (instances != null)
{
instances.Dispose();
instances = null;
}
}
}
It's a little naive, but it works :)
If the machines honor ICMP echo requests, you can use the Ping class instead of WMI.