Автор
|
Тема: Создание сервиса на удалённой машине
|
arty |
опубликован 24-01-2002 10:09 MSK
Мне нужно создать сервис на удалённой машине. Для этого сначала использую ф-цию OpenSCManager("\\host_name",NULL,SC_MANAGER_ALL_ACCESS), на что она возвращает ошибку 1722 - The RPC server is unavailable. Может надо до вызова ещё что-то сделать? В MSDN про ето на написано. А может ошибка в чём-то другом. Помогите, плиз. Кстати, есть такая примочка в Resource Kit - sc.exe, которая работает с сервисами (в том числе позволяет и удалённо создать его). Так вот с ней у меня получается создать.
|
bin
|
опубликован 25-01-2002 11:15 MSK
Что ты понимаешь под "создать", хочешь потом SC_MANAGER_CREATE_SERVICE? Как ты опрашиваешь GetLastError? Если так: if ((schManager=OpenSCManager(...))==NULL) { printf("%lu\n",GetLatError()); return FALSE; } то все Ok, и еще раз проверь проверь имя хоста. А если так: schManager=OpenSCManager(...); le=GetLastError(); if (le!=0) { printf("%lu\n",le); return FALSE; } то добавь проверку schManager. |
arty
|
опубликован 25-01-2002 19:28 MSK
Прошу прощения за может быть некорректно сформулированный вопрос. Вот код, может быть, так будет понятнее.#include <windows.h> #include <stdio.h> #define MACHINE_NAME "\\host" #define BIN_PATH "C:\\Temp\\Agent.exe" #define ACCOUNT_NAME "\\host" int main() { SC_HANDLE hsCManager = NULL; if(!(hsCManager = OpenSCManager("\\ARTY",SERVICES_ACTIVE_DATABASE,SC_MANAGER_ALL_ACCESS))) { DWORD _err = GetLastError(); switch(_err) { case ERROR_ACCESS_DENIED:MessageBox(NULL,"ERROR_ACCESS_DENIED","",MB_OK);break; case ERROR_DATABASE_DOES_NOT_EXIST:MessageBox(NULL,"ERROR_DATABASE_DOES_NOT_EXIST","",MB_OK);break; case ERROR_INVALID_PARAMETER:MessageBox(NULL,"ERROR_INVALID_PARAMETER","",MB_OK);break; } CHAR err[1024]; sprintf(err,"Opening SCManager has failed. Error=%i",GetLastError()); MessageBox(NULL,err,"",MB_OK); CloseServiceHandle(hsCManager); return -1; } else { //создание сервиса } MessageBox(NULL,"Service was created successfully.","",MB_OK); return 0; } |
arty
|
опубликован 25-01-2002 19:47 MSK
Пардон. Конечно же CHAR err[1024]; sprintf(err,"Opening SCManager has failed. Error=%i",_err); MessageBox(NULL,err,"",MB_OK); CloseServiceHandle(hsCManager); return -1;
|
arty
|
опубликован 25-01-2002 19:58 MSK
Разобрался. Вместо \\host надо \\\\host. С кем не бывает :-)) |