Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.11.21;
Скачать: CL | DM;

Вниз

Путь к исполняемому файлу сервиса   Найти похожие ветки 

 
Донской   (2002-09-22 15:21) [0]

Как самому сервису узнать, откуда он был запущен, полный путь?
В обычных прогах все просто - Application.exename. У сервиса я такого не нашел...


 
Донской   (2002-09-22 15:50) [1]

Вернет ли функция getcurrentdir ВСЕГДА путь к директории запуска?


 
Донской   (2002-09-22 15:58) [2]

Нет. Не возвращает - проверено.
Пишет C:\WinNt\....
А как тогда?


 
ZZ ©   (2002-09-22 16:16) [3]

Ну если только в конфиге сервиса посмотреть...
QueryServiceConfig

В обычных прогах все просто - Application.exename
А еще ParamStr(0)


 
Донской   (2002-09-22 16:39) [4]

Param[0] содержит только имя сервиса - проверил.
QueryServiceConfig - секундочку.. щас тоже посмотрю...

Я делаю так, но что-то явно не то - появляется ошибка.

VAR
h_manager,h_svc: SC_Handle;
svc_status: PQUERYSERVICECONFIGA;
size:dword;
BEGIN
h_manager := OpenSCManager(PChar(""), Nil, SC_MANAGER_CONNECT);

h_svc := OpenService(h_manager, PChar("SLFT_v1"), SERVICE_START or SERVICE_QUERY_STATUS);
getmem(svc_status,sizeof(svc_status));
QueryServiceConfig(h_svc,svc_status,sizeof(svc_status),size);
s:=svc_status.lpBinaryPathName;


Типа S - это нужный мне путь.


 
Донской   (2002-09-22 16:52) [5]


h_manager := OpenSCManager(PChar(""), Nil,
SC_MANAGER_CONNECT);


h_svc := OpenService(h_manager, PChar("SLFT_v1"),SERVICE_QUERY_CONFIG);
//getmem(svc_status,200000);
QueryServiceConfig(h_svc,svc_status,sizeof(svc_status),size);
s:=svc_status.lpBinaryPathName;
raise exception.create(syserrormessage(getlasterror));


На этот код появляется сообщение в Журнале событий (его я использую для отладки :))), что область, переданная системе по вызову слишком мала. Видимо, я неправильно определяю область памяти для структуры...


 
ZZ ©   (2002-09-22 16:53) [6]

Например, вот так -
uses ShellApi;

type
PWCharArr = ^WCharArr;
WCharArr = array [0..100] of PWideChar;
procedure TForm1.Button1Click(Sender: TObject);
var
hSCM,hSrv : THandle;
dwConfig,dwNeed : Cardinal;
Config : PQueryServiceConfigW;
Argc : Integer;
Argv : PWCharArr;
begin
hSCM:= OpenSCManager(nil,nil,SC_MANAGER_ALL_ACCESS);
hSrv:= OpenService(hSCM,"Apache",SERVICE_ALL_ACCESS);

dwConfig := 4096;
GetMem(Config,dwConfig);

if not QueryServiceConfigW(hSrv,Config,dwConfig,dwNeed)
then ShowMessage(SysErrorMessage(GetLastError()));
ShowMessage(Config.lpBinaryPathName);

Argv := PWCharArr(CommandLineToArgvW(Config.lpBinaryPathName,Argc));
ShowMessage(Argv[0]);
GlobalFree(Cardinal(Argv));
end;


 
Донской   (2002-09-22 17:12) [7]

На строку

Argv := PWCharArr(CommandLineToArgvW(Config.lpBinaryPathName,Argc));

ругается Incobatible Tipes Char and WideChar

Но остальное работает, Спасибо!




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

Текущий архив: 2002.11.21;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.022 c
3-69133
Johnmen
2002-10-30 10:03
2002.11.21
QuickReport


3-69192
S.E.M.
2002-10-30 22:09
2002.11.21
Проблемы с получением ID только что созданой записи


1-69283
_Nicola_
2002-11-12 09:48
2002.11.21
Assign или :=


3-69207
Relict
2002-11-01 09:11
2002.11.21
видел тут вопрос про 1С...может и мне подскажут..


1-69244
Delph
2002-11-11 16:18
2002.11.21
Пример ComboBox в ячейке DBGrid вместо значения.