Подключитесь к удаленному компьютеру, используя WMI и C # - PullRequest
1 голос
/ 25 марта 2011

Hy ... Я пытаюсь подключиться к удаленному компьютеру с помощью WMI и C #. Я получаю сообщение об ошибке: сервер RPC недоступен. (Результат исключения HRESULT: 0x800706BA). Я не знаю, связано ли это с кодом, поэтому я использую это:

serverN = InputText.Text;//serverN=IPAddress
userN = userName.Text;
passN = passName.Text;
if (String.IsNullOrEmpty(serverN))
                serverN = ".";
ManagementClass manC = new ManagementClass("Win32_LogicalDisk");
string strScope = string.Format(@"\\{0}\root\cimv2", serverN);
ConnectionOptions conOpt = new ConnectionOptions();
conOpt.Username = userN;
conOpt.Password = passN;
manC.Scope = new ManagementScope(strScope, conOpt);

Когда я пытаюсь получить экземпляры от manC, я ловлю исключение с недоступным RPC. Локально это работает, поэтому я предполагаю, что мне нужно сделать некоторые настройки на удаленном компьютере (ОС: Windows XP sp2). Я проверил, чтобы он разрешал удаленные подключения, и вставил команду netsh firewall set service RemoteAdmin в командную строку. Нужно ли указывать доменное имя или сетевой идентификатор? Или мне чего-то не хватает?

Ответы [ 5 ]

3 голосов
/ 27 декабря 2011

Я знаю, что может быть поздно для вас, но для других, кто может наткнуться на этот пост: Если вы уверены, что это не проблема с правами пользователя (вы знаете, что папка имеет разрешения) Проверьте, что вы предоставляете в качестве AuthenticationLevel объекту ConnectionOptions. Я просмотрел каждый из них, и для меня работает только опция PacketPrivacy.

ConnectionOptions conOp = new ConnectionOptions();
conOp.Authentication = System.Management.AuthenticationLevel.PacketPrivacy;
0 голосов
/ 28 октября 2012

Код работает локально, потому что вы уже вошли в систему. Удаленные соединения WMI всегда требуют дополнительных прав безопасности. Ваше первое обновление кода должно включать impersonationLevel: http://msdn.microsoft.com/en-us/library/windows/desktop/aa389288%28v=vs.85%29.aspx

Если impersonationLevel недостаточно, то следующим шагом должно быть указание явных учетных данных. Это будет работать. Есть еще один вариант, но я не рекомендую его: «делегировать полномочия», который позволяет такой учетной записи претендовать на роль любой учетной записи в домене.

0 голосов
/ 26 марта 2011

Не показаться грубым, но: вы уверены, что значение в InputText.Text является правильным? Один из простых способов получить «RPC-сервер недоступен» - указать неверное имя для сервера. Возможно, стоит проверить значение 'scope' в отладчике после вызова string.Format.

Кстати, я полагаю, это просто опечатка, когда вы создаете и инициализируете строку с именем 'scope', но передаете переменную с именем 'strScope' в конструктор ManagementScope?

0 голосов
/ 26 марта 2011

Похоже, проблема с разрешениями ИМХО.Исходя из моего опыта, вам нужно настроить некоторые явные разрешения безопасности для удаленных вызовов WMI.

Есть статья на TechNet, которая может помочь: http://technet.microsoft.com/en-us/library/cc787533%28WS.10%29.aspx Вы установили соответствующие разрешения?

0 голосов
/ 25 марта 2011

Вероятно, потребуется больше информации о вашей настройке.Оба компьютера находятся в одном домене?

Вы можете начать с проверки работоспособности WMI перед тем, как попробовать его в C #.Попробуйте следующее в командной строке, чтобы проверить, работает ли это.

wmic /node: path Win32_logicaldisk

wmic также имеет параметр / user, который вы можете использовать для проверки с вашим именем пользователя и паролем.1009 * Вы можете попробовать изменить свойство Authentication and Impersonation в ConnectionOptions .Это часто меняется от среды к среде и может привести к сбою соединения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...