определить, находится ли машина в сети или в автономном режиме, используя WMI и C #
Я использую vs2008, winxp, в локальной сети с серверами Win2003.
Я хочу, чтобы приложение, установленное в winxp, определяло, находятся ли машины win2003 в сети или в автономном режиме, и если они отключены при загрузке.
У меня есть эти ссылки, есть еще ссылки, примеры кода и лучшие практики ??
Не уверен, что понял, когда, но если машина отключена, не будет ли сложно сказать ей перезагрузиться?
- personHans Passant  schedule27.01.2011
comment
@Hans Passant: я тоже думал об этом, и я полагаю, что он хочет определить, когда машина станет доступной, т.е. е. загрузился.
- personChristoph  schedule27.01.2011
Я бы выбрал .NET System.Net.NetworkInformation.Ping, потому что он довольно гибкий, у вас есть возможность делать это асинхронно, и я нахожу его более интуитивным, чем WMI (я использовал оба и использую WMI, только если мне нужно получить больше информации от удаленного машина, чем просто пинг). Но это всего лишь личное мнение.
Не совсем уверен, к чему вопрос, но для чего он стоит, у меня есть тестовая среда, которая запускает тесты на виртуальных машинах и требует их перезагрузки. После перезагрузки коробки (через WMI) я жду, пока не будет выполнен пинг, затем успешный пинг (используя System.Net.NetworkInformation.Ping, как упоминалось другими), затем мне нужно дождаться готовности Windows:
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;
}
}
}