Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2008.02.03;
Скачать: [xml.tar.bz2];

Вниз

Remote Install сервиса   Найти похожие ветки 

 
Chaser ©   (2007-05-07 14:43) [0]

Написал простенький сервис.
Теперь хочу создать функцию Remote Install для этого сервиса (удаленная установка сервиса, как это реализовано в некоторых программах удаленного администрирования).
Перерыл Интернет, но практически по этому вопросу ничего не нашел.
Если у кого-нибудь есть примеры кода или хотя бы какая-то информация как можно реализовать Remote Install, буду благодарен за любую помощь по этому вопросу.


 
Leonid Troyanovsky ©   (2007-05-07 14:53) [1]


> Chaser ©   (07.05.07 14:43)  

> Перерыл Интернет, но практически по этому вопросу ничего
> не нашел.

http://rsdn.rsdn.ru/?summary/2393.xml

--
Regards, LVT.


 
Rouse_ ©   (2007-05-07 14:53) [2]

Да очень просто. OpenSCManager("\\REMOTE_COMP_NAME"...
И дальше как обычно...


 
Chaser ©   (2007-05-07 15:18) [3]

ОК, благодарю за инфу.

ПС. Если будут еще варианты по теме, кидайте ссылки, не помешают.


 
Chaser ©   (2007-05-08 13:41) [4]

Статьи прочел, но не особо воткнул, как все-таки удаленно установить сервис?
Ведь для начала сервис нужно каким-то образом копировать на удаленную машину, затем запустить.
Как его туда копировать непонятно (
Нет ли исходников прилагающихся к статьям http://rsdn.rsdn.ru/?summary/2393.xml, но не на СИ, а на Delphi?


 
Rouse_ ©   (2007-05-08 15:44) [5]

Ты, собственно, что пишешь?


 
Chaser ©   (2007-05-08 16:06) [6]

Нужно написать софт (по работе), который бы устанавливал некие сервисы удаленно на сетевые машины.
Порылся в нете, но не информации ни примеров не нашел, т.е. по сервисам много чего есть, но по этой теме как то пусто.
Написал простой сервис для теста, а вот как его удаленно инсталлировать не ясно.
Может подскажешь подробнее как это делается, или хотябы этапы процесса установки?


 
Rouse_ ©   (2007-05-08 16:21) [7]

Имея права администратора на удаленной машине или права администратора домена, кописуешь сервер на удаленную машину, соединяешся с ее SCM и даешь ему команду на установку и запуск сервиса.
Если админских прав нет, то пишешь докладную начальнику, мол всвязи со служебной необходимостью прошу админа дать мне логин и пароль для учетки с админскими правами...


 
Chaser ©   (2007-05-08 16:29) [8]

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


 
Rouse_ ©   (2007-05-08 16:40) [9]

Имея права админа, просто скопировать в удаленную папку. "Copy" с путем \\remote_comp_name\C$\temp\


 
Chaser ©   (2007-05-08 16:41) [10]

ОК, понял.
Сенькс за помощь.


 
VirEx ©   (2007-05-08 18:44) [11]

program SCMTestApp;

{$APPTYPE CONSOLE}

uses
 SysUtils,
 Winsvc,  //для работы с сервисами
 Windows; //для распознавания ошибок

//===================================================
// далее идут вспомогательные процедуры и функции
//

//установка драйвера
function InstallDriver(scm :SC_HANDLE;DrvName,DrvPath:PChar):string;
var
 Service:SC_HANDLE;
begin
//создаем сервис
Service:=CreateService(scm, //дескриптор создаваемого сервиса
DrvName,                    //имя сервиса (для системы)
DrvName,                    //имя сервиса для вывода на экран
SERVICE_ALL_ACCESS,         //тип доступа (полный)
SERVICE_KERNEL_DRIVER,      //тип сервиса (драйвер)
SERVICE_DEMAND_START,       //тип запуска (по опросу)
SERVICE_ERROR_NORMAL,       //реакция системы на ошибку
DrvPath,                    //путь к *.sys файлу
nil,nil,nil,nil,nil);       //здесь не используются

if scm<>0 then result:="Install driver OK" else
 //вывод ошибок
 case GetLastError of
 ERROR_ACCESS_DENIED:        result:="ERROR_ACCESS_DENIED";
 ERROR_CIRCULAR_DEPENDENCY:  result:="ERROR_CIRCULAR_DEPENDENCY";
 ERROR_DUP_NAME:             result:="ERROR_DUP_NAME";
 ERROR_INVALID_HANDLE:       result:="Driver fail install";
 ERROR_INVALID_NAME:         result:="ERROR_INVALID_NAME";
 ERROR_INVALID_PARAMETER:    result:="ERROR_INVALID_PARAMETER";
 ERROR_INVALID_SERVICE_ACCOUNT: result:="ERROR_INVALID_SERVICE_ACCOUNT";
 ERROR_SERVICE_EXISTS:       result:="Driver already install";
 end;
//закрываем сервис
CloseServiceHandle(Service);
end;

//удаление драйвера
function RemoveDriver(scm :SC_HANDLE;DrvName:PChar):string;
var
 Service:SC_HANDLE;
begin
//открываем сервис
Service:=OpenService(scm,DrvName,SERVICE_ALL_ACCESS);
if Service=0 then result:="Driver not install" else
if DeleteService(Service) then result:="Driver remove OK";
//закрываем сервис
CloseServiceHandle(Service);
end;

//запуск драйвера
function StartDriver(scm :SC_HANDLE;DrvName:PChar):string;
var
 Service:SC_HANDLE;
 arg:PChar;
begin
arg:=nil;
//открываем сервис
Service:=OpenService(scm,DrvName,SERVICE_ALL_ACCESS);
if Service=0 then result:="Driver not install" else
 if StartService(Service,0,arg) then result:="Driver start OK" else
 //вывод ошибок
 case GetLastError of
 ERROR_INVALID_HANDLE:         result:="ERROR_INVALID_HANDLE";
 ERROR_PATH_NOT_FOUND:         result:="ERROR_PATH_NOT_FOUND";
 ERROR_SERVICE_ALREADY_RUNNING:result:="Driver already start";
 ERROR_SERVICE_DATABASE_LOCKED:result:="ERROR_SERVICE_DATABASE_LOCKED";
 ERROR_SERVICE_DEPENDENCY_DELETED: result:="ERROR_SERVICE_DEPENDENCY_DELETED";
 ERROR_SERVICE_DEPENDENCY_FAIL:result:="ERROR_SERVICE_DEPENDENCY_FAIL";
 ERROR_SERVICE_DISABLED:       result:="ERROR_SERVICE_DISABLED";
 ERROR_SERVICE_LOGON_FAILED:   result:="ERROR_SERVICE_LOGON_FAILED";
 ERROR_SERVICE_MARKED_FOR_DELETE: result:="ERROR_SERVICE_MARKED_FOR_DELETE";
 ERROR_SERVICE_NO_THREAD:      result:="ERROR_SERVICE_NO_THREAD";
 ERROR_SERVICE_REQUEST_TIMEOUT:result:="ERROR_SERVICE_REQUEST_TIMEOUT";
 end;
//закрываем сервис
CloseServiceHandle(Service);
end;

//остановка драйвера
function StopDriver(scm :SC_HANDLE;DrvName:PChar):string;
var
 Service:SC_HANDLE;
 ServStatus:TServiceStatus;
begin
//открываем сервис
Service:=OpenService(scm,DrvName,SERVICE_ALL_ACCESS);
if Service=0 then result:="Driver not install" else
 if ControlService(Service,SERVICE_CONTROL_STOP,ServStatus) then result:="Driver stop OK" else
 //вывод ошибок
 case GetLastError of
 ERROR_INVALID_HANDLE:         result:="ERROR_INVALID_HANDLE";
 ERROR_ACCESS_DENIED:            result:="ERROR_ACCESS_DENIED";
 ERROR_DEPENDENT_SERVICES_RUNNING:result:="ERROR_DEPENDENT_SERVICES_RUNNING";
 ERROR_INVALID_SERVICE_CONTROL:  result:="ERROR_INVALID_SERVICE_CONTROL";
 ERROR_SERVICE_CANNOT_ACCEPT_CTRL:result:="ERROR_SERVICE_CANNOT_ACCEPT_CTRL";
 ERROR_SERVICE_NOT_ACTIVE:       result:="Driver already stopped";
 ERROR_SERVICE_REQUEST_TIMEOUT:  result:="ERROR_SERVICE_REQUEST_TIMEOUT";
 end;
//закрываем сервис
CloseServiceHandle(Service);
end;

//помощь о командах
procedure Help;
begin
Writeln("-------------------------------");
Writeln("|Test drivers from SCM meneger|");
Writeln("-------------------------------");
Writeln("Commands:");
Writeln("1 - Install driver");
Writeln("2 - Start   driver");
Writeln("3 - Stop    driver");
Writeln("4 - Remove  driver");
Writeln("99 - exit");
Writeln("-------------------------------");
end;
//
// вспомогательные процедуры и функции заканчиваются здесь,
// далее идёт главная процедура программы
// (в языке C/C++ она называется Main)
//===================================================

var
 i:integer;
 scm_:SC_HANDLE;//дескриптор SCM менеждера
 status:string; //строка статуса (для вывода)
begin
//запуск SCM менеждера
scm_:=OpenSCManager(nil,nil,SC_MANAGER_ALL_ACCESS);

if scm_<>0 then WriteLn("SCM Manager start OK")//успешный запуск
else begin
 WriteLn("SCM Manager start fail");//показываем ошибку на экране
 readln;// до ввода любого символа
 exit;  // выход из программы
end;

status:="";
Help; // выводим меню команд при старте
repeat
//цикл, до тех пор, пока не будет
//введена цифра 99
begin
  readln(i);// запоминаем код команды
  Help;     // выводим меню команд после ввода команды
  case i of
  //команды
     1: status:=InstallDriver(scm_,"Example","D:\Example\objchk_wxp_x86\i386\Example.sys ");
     2: status:=StartDriver  (scm_,"Example");
     3: status:=StopDriver   (scm_,"Example");
     4: status:=RemoveDriver (scm_,"Example");
  end;
  Writeln("Driver status="+Status);//статус результата команды
  Write(">"); //командное приглашение
end;
until i=99;

//останавливаем SCM менеждер
CloseServiceHandle(scm_);
end.


 
Eraser ©   (2007-05-08 18:48) [12]

> OpenSCManager

будет работать только в домене, хе-хе )


 
Chaser ©   (2007-05-08 20:51) [13]


> VirEx ©   (08.05.07 18:44) [11]

Благодарю за пример!


 
Rouse_ ©   (2007-05-09 18:14) [14]


> VirEx ©   (08.05.07 18:44) [11]

Фига, ты действительно ставишь драйвер просто через SCM? Не боишся? :)


 
VirEx ©   (2007-06-28 20:36) [15]


>  [14] Rouse_ ©   (09.05.07 18:14)
>
> > VirEx ©   (08.05.07 18:44) [11]
>
> Фига, ты действительно ставишь драйвер просто через SCM?
> Не боишся? :)

это из диплома ;)



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2008.02.03;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.037 c
15-1198778080
Pazitron_Brain
2007-12-27 20:54
2008.02.03
Как установить ИЕ?


15-1198493970
--= Eagle =--
2007-12-24 13:59
2008.02.03
D2007, установка (портирование) компонента


2-1200213332
Василий
2008-01-13 11:35
2008.02.03
If


2-1199868237
DevilDevil
2008-01-09 11:43
2008.02.03
Почему может возникать неправильная максимизация ?


15-1199134826
Ega23
2008-01-01 00:00
2008.02.03
С Новым Годом!!!!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский