Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > OpenService


Автор: Fiyanov 4.6.2007, 12:34
Нашёл функцию в DRKB "Как проверить запущен ли сервис?". Попробовал. Чёт не прёт. 
Эта строчка проходит нормально.
Код

SCManHandle := OpenSCManager(sMachine, nil, SC_MANAGER_CONNECT); 

А вот эта:
Код

SvcHandle := OpenService(SCManHandle, sService, SERVICE_QUERY_STATUS); 

Ничего не делает. Как я понял. Возвращает ноль и всё тут. В чём дело? 

Автор: dumb 4.6.2007, 12:41
ошибка в 17-ой строке.

что говорит GetLastError() после возврата 0 OpenService'ом?

Автор: Fiyanov 4.6.2007, 12:46
Говорит 1060.

Автор: Fiyanov 4.6.2007, 13:03
На обсалютно все сервиса говорит что они не установлены. 

Код

procedure TForm1.Button1Click(Sender: TObject);
begin
caption:=inttostr(ServiceGetStatus(nil,PAnsiChar(Edit1.text)));
caption:=SysErrorMessage(GetLastError());
end;

Автор: Rennigth 4.6.2007, 13:44
Цитата

Код ошибки: 1060 (0x0424)
Указанная служба не установлена. 


Fiyanov

Скорее всего банально имя службы нето передаешь. Пример что вводишь в Edit1.text дай.

Автор: dumb 4.6.2007, 13:51
Код

SCManHandle := OpenSCManager(sMachine, nil, SC_MANAGER_ALL_ACCESS); 

флаг SC_MANAGER_CONNECT автоматом используется(неявно) при вызове этой функции. так что ты, считай без прав открывал.

и что ты в Edit1 пишешь? пример приведи.

Автор: Fiyanov 4.6.2007, 13:57
Всё в точку!!! Я вводил "Выводимое имя", а не имя службы! И ясен пень он мне всё время говорил что мол нету такой службы. Так как чаще всего  "Выводимое имя"<>"Имя службы". Спасибо большое! А то так бы и грешил на функцию.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)