Сервер RPC недоступен.при вызове ManagementScope.Connect - PullRequest
1 голос
/ 22 ноября 2010

Мне нужно создать службу удаленно, и я бы предпочел не вызывать команду и запустить команду "sc \ remotemachine create ......" и захотеть сделать это в коде C #.

Однакопри выполнении кода, даже несмотря на то, что команда sc работает довольно успешно и, таким образом, управляет удаленной системой, вызов ManagementScope.Connect вызывает исключение с «Сервер RPC недоступен».

Фрагмент кода, который выполняетэто

string machineName = "othermachine";
string path = string.Format(@"\\{0}\root\cimv2", machineName);
ManagementScope scope = new ManagementScope(path);
scope.Connect();

, так как это примерно первый шаг в путешествии, я немного застрял в том, куда идти дальше.Команда sc работает, так что же она делает по-другому (кроме использования библиотек .net - может быть, мне нужно сильнее ударить по winapi?)

Спасибо

Ответы [ 2 ]

2 голосов
/ 23 ноября 2010

Подумав немного, увидев, что время, отведенное для этой задачи, было разрушено, я вытащил старую документацию по API для WIN32 и [DllImport] отредактировал вызовы, которые мне нужны, чтобы сделать это «по старинке». Будучи старой собакой Си, я знал, как обходить эти вызовы, и удивительно, как много возвращается, даже после нескольких лет использования управляемых библиотек.

Мне нужно было создать службу, запустить ее, выполнить полезную работу, остановить ее и удалить. Создание, запуск, остановка и удаление - это механика, и я хотел сосредоточиться на части «сделать полезную работу».

Сначала я скопировал exe-файл службы на общий ресурс ADMIN $ и проверил локальный путь к нему (с нашими администраторами серверов это не известно!). Для этого я звоню

["netapi32.dll"]NetShareGetInfo 

, а затем я использовал следующее с advapi32.dll

  • OpenSCManager
  • CreateService
  • StartService
  • OpenService (для случая, когда я хочу остановить и удалить его - не держите ручки открытыми, так как это может занять некоторое время, так что, чтобы сохранить самодостаточность вещей)
  • ControlService
  • QueryServiceStatus
  • CloseServiceHandle

Это все работает даже через VPN-соединение.

Я могу только догадываться, что управляемый API-интерфейс пытается сделать гораздо больше, чем мне действительно нужно - разница во времени, затрачиваемом на использование управляемого API-интерфейса и API-интерфейса Windows, довольно велика, и нет никаких гарантий, что управляемый API-интерфейс получит через это не было подходящего пути вперед.

0 голосов
/ 22 ноября 2010

Очевидно, что стандартный код от MSDN не рисует всю картину.Я получаю те же результаты, что и вы.

Проверьте, что этот парень сделал .

РЕДАКТИРОВАТЬ:

Я полагаю, вы пытаетесь это нарабочая группа, а не домен, верно?Это хитрость, рабочие группы требуют немного больше работы, чтобы пройти.Ссылка выше, кажется, имеет обходной путь.Сегодня вечером я попробую еще раз из дома.

...