Текущий архив: 2006.02.12;
Скачать: CL | DM;
ВнизКак перезапустить службу на удаленном компьютере Найти похожие ветки
← →
Германн © (2005-11-29 03:44) [0]Вкратце суть такова. Отлаживаем TCP-сервер выполненный в виде службы. Иногда он "не замечает" подключений клиентов, при том, что на стороне клиента, вроде бы всё ОК. Перезапуск службы решает задачу, но только на некоторое время. Порой весьма долгое.
К сожалению, автор данного сервера, пока что работает в "удаленном режиме". Так вот, наша задача - представить ему максимально подробный лог.
Клиента я написАл. Но вот что делать с сервером-сервисом, чтобы его перезапустить программно?
P.S. Проблем с паролями, и ес-сно с правами нет никаких.
← →
Alexandr Bydantcev © (2005-11-29 04:43) [1]Скинул тебе проект. Возможно, поможет. У нас такая проблема есть с Hasp Компаса - даже официальные дилеры не могут помочь. Пришлось нарисовать прогу. Ранее нечто подобное писал для Hasp 1С.
Вопросы - на мыло. Эту тему разрисовывал конкретно. Даже Аскон-Курган спрашивал про прогу. :)) Предлагали быть распространителем. :) Шутю, конечно. :))))
← →
Alexandr Bydantcev © (2005-11-29 04:44) [2]Проект в D7.
← →
Digitman © (2005-11-29 08:38) [3]
> Германн © (29.11.05 03:44)
OpenSCManager() позволяет указывать имя удаленной машины.
Далее все как обычно - ControlService(SERVICE_CONTROL_STOP) + StartService()
← →
Германн © (2005-11-30 02:05) [4]Спасибо Александр. Письмо получил.
Спасибо Сергей.
К сожалению весь вчерашний день съела "текучка, так что этим вопросом смог заняться только сейчас. Написал процедуру рестарта сервиса. Завтра буду её пробовать. Если кто захочет её просмотреть и покритиковать, буду рад, потому что сия область для меня - "непаханное поле".function TMainF.RestartA2: Boolean;
var
HManager,HService : SC_Handle;
ServiceStat : TServiceStatus;
LastErr : DWord;
Temp : PChar;
St : String;
begin
Result:=False;
RestartAborted:=False;
St:=EAddr.Text;
HManager:=OpenSCManager(PChar(St),nil,SC_MANAGER_CONNECT);
if HManager > 0 then begin
HService:=OpenService(HManager,"SHELT A2",SERVICE_QUERY_STATUS or SERVICE_START or SERVICE_STOP);
if HService > 0 then begin
if QueryServiceStatus(HService,ServiceStat) then begin
if ServiceStat.dwCurrentState <> SERVICE_STOPPED then begin
if ControlService(HService,SERVICE_CONTROL_STOP,ServiceStat) then begin
while (SERVICE_STOPPED <> ServiceStat.dwCurrentState) do begin
Sleep(ServiceStat.dwWaitHint);
if not QueryServiceStatus(HService,ServiceStat) then begin
LastErr:=GetLastError;
SaveLog("QueryServiceStatus (While try to Stop)",nil,"GetLastError="+
IntToStr(LastErr)+" HEX="+IntToHex(LastErr,4));
Exit;
end;
Application.ProcessMessages;
if RestartAborted then begin
SaveLog("RestartCancelled",nil,"");
Exit;
end;
end;
end else begin
LastErr:=GetLastError;
SaveLog("ControlService",nil,"GetLastError="+IntToStr(LastErr)+" HEX="+IntToHex(LastErr,4));
Exit;
end;
end;
Temp:=nil;
if not StartService(HService,0,Temp) then begin
LastErr:=GetLastError;
SaveLog("StartService",nil,"GetLastError="+IntToStr(LastErr)+" HEX="+IntToHex(LastErr,4));
end;
end else begin
LastErr:=GetLastError;
SaveLog("QueryServiceStatus",nil,"GetLastError="+IntToStr(LastErr)+" HEX="+IntToHex(LastErr,4));
end;
CloseServiceHandle(HService);
end else begin
LastErr:=GetLastError;
SaveLog("OpenService",nil,"GetLastError="+IntToStr(LastErr)+" HEX="+IntToHex(LastErr,4));
end;
CloseServiceHandle(HManager);
end else begin
LastErr:=GetLastError;
SaveLog("OpenSCManager",nil,"GetLastError="+IntToStr(LastErr)+" HEX="+IntToHex(LastErr,4));
end;
Result:=True;
end;
...Оформил её в виде функции, скорее по привычке. А вдруг понадобится.
...Процедура SaveLog записывает в некий файл нужные мне данные о ситуациях в программе.
...RestartAborted - переменная главной формы, которой можно задать значение либо из обработчика OnClick, либо из обработчика OnTimer.
← →
Германн © (2005-11-30 17:37) [5]OpenService(HManager,"SHELT A2",SERVICE_QUERY_STATUS or SERVICE_START or SERVICE_STOP), увы дает ERROR_ACCESS_DENIED.
Что сделать надо?
← →
Alexandr Bydantcev © (2005-11-30 17:41) [6]У компьютера, на котором запускается программа, должен быть адм. доступ к компу с сервисом. Без этого - :(
Поскольку сам имею права админа на всех компах своей сети - то другого решения не знаю.
← →
Германн © (2005-11-30 18:00) [7]Пошел по простому пути. Запустил программу на компьютере с сервисом. Так работает. Спасибо всем.
← →
Германн © (2005-12-01 02:15) [8]Всё вроде нормально работает. Статистика набирается.
Но уж коль "залез в корзину", то хотел бы побольше узнать, прежде чем "назваться груздем". :-)
Не сочтите за наглость следующий мой вопрос.
Не понимаю как "у компьютера" могут быть права администратора на другом компьютере? Имхо, такие права могут быть только у пользователя, под паролём которого запущен данный процесс. Или я не прав? А если я прав, то как эти права получить? В конкретном случае на обоих компах WinXP. (Имхо в 2к и выше, наверно, тоже самое).
← →
Alexandr Bydantcev © (2005-12-01 02:29) [9]Имею в виду возможность назначения права компьютеру. Это точно так же, как и пользователю. В административную группу можно добавлять не только пользователей, но и компютеры (по их именам).
Но поскольку большого опыта работы с рабочими группами нет (имеется в виду отсутствие сервера домена), то могу сказать только, что это влегкую работает на Active Directory.
← →
Германн © (2005-12-01 02:54) [10]2 Alexandr Bydantcev © (01.12.05 02:29) [9]
Спасибо. Приму к сведению. Ничего не понял, но... Будем разбираться, если приспичит. :-)
← →
Alexandr Bydantcev © (2005-12-01 02:56) [11]Можешь писать на мыл. Объяснить не лениво.
← →
Германн © (2005-12-01 03:14) [12]2 Alexandr Bydantcev © (01.12.05 02:56) [11]
НаписАл бы обязательно, если бы были конкретные вопросы. Спасибо за желание помочь мне.
Но, имхо, "Гложат меня смутные сомнения. У Шпака - магнитофон, у посла - медальон" © "Иван Васильевич меняет профессию".
Если у "компьютера" есть права Администратора на "другой компьютер", то, следовательно, любой "юзер" может изменить "всё, что угодно" на любом другом компьютере в данной сети!
← →
Alexandr Bydantcev © (2005-12-01 04:30) [13]Ну да, поэтому и не всем нужно давать сии права. :)
Если за моей машиной больше никто не сидит, то почему бы и не дать себе "таблеток от жадности, и побольше, побольше". :) Хотя в данном случае права пользователя значат то же самое.
Страницы: 1 вся ветка
Текущий архив: 2006.02.12;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.043 c