Форум: "Основная";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];
ВнизКак определить запускают программу как сервис или приложение? Найти похожие ветки
← →
-=GUEST=- (2005-06-04 18:53) [0]Есть программа. Может работать и как сервис, и как приложение.
Вопрос:
Можно ли определить что эту программу пытаются запустить как сервис (т.е. его запускает Service Manager), или его запускают как приложение - пользователь щелкнув на иконку.
Сразу напрашивается решение - если сервис, передать параметр
"-s" например (т.е зарегистрировать сервис и в строку запуска внести ПУТЬ_К_ПРОГРАММЕ -s), как в Firebird SQL Server.
Но есть Liga Database Server (сервер юридической базы данных), который умеет это делать без доп. параметров (сам определяет тип запуска).
Как это сделать?
← →
Ученик (2005-06-04 22:14) [1]>-=GUEST=- (04.06.05 18:53)
Наверно, по пользователю (SYSTEM) или запустившему процессу (services.exe)
← →
sniknik © (2005-06-04 22:19) [2]борланд сокет сервер (scktsrvr.exe) тоже умеет, и от него в дельфях есть исходники...
← →
Ученик (2005-06-04 22:27) [3]>sniknik © (04.06.05 22:19) [2]
Там первый вариант :-)
← →
sniknik © (2005-06-04 23:36) [4]Ученик (04.06.05 22:27) [3]
в смысле? не вижу чегото здесь деления на варианты.
← →
Ученик (2005-06-04 23:50) [5]>sniknik © (04.06.05 23:36) [4]
Сочуствую :-)
← →
Eraser © (2005-06-05 00:04) [6]-=GUEST=- (04.06.05 18:53)
Как вариант можно по параметру командной строки определять.
← →
Alex Konshin © (2005-06-05 10:49) [7]Вызов сервиса отличается тем что ему не передаются параметры, т.е. ParamCount = 0.
← →
sniknik © (2005-06-05 12:59) [8]Ученик (04.06.05 23:50) [5]
> Сочуствую :-)
лучше бы обьяснил.
есть программа которая может работать и как приложение и как сервис, от нее есть исходники, в них можно посмотреть как она различает вызовы.
- это один вариант.
и это именно то что описывается в вопросе, то что нужно.
где второй вариант?
Alex Konshin © (05.06.05 10:49) [7]
да нет, там посложнее, целая функция написана сторок на 30.
← →
Ученик (2005-06-05 13:11) [9]>sniknik © (05.06.05 12:59) [8]
Ученик (04.06.05 22:14) [1]
>-=GUEST=- (04.06.05 18:53)
Наверно, по пользователю (SYSTEM) или запустившему процессу (services.exe) - два варианта.
В Borland\Delphi7\Source\Vcl\ScktSrvr.dpr используется определение по имени пользователя
← →
sniknik © (2005-06-05 13:44) [10]а так ты по своему ответу на варианты делиш..., а я их в вопросе ищу.
← →
-=GUEST=- (2005-06-05 15:05) [11]В результате имеем три варианта:
1. По имени пользователя.
Пример в ($Delphi)\Source\Vcl\ScktSrvr.dpr (Начиная с Delphi5)
2. По запустившему процессу.
3. По передаваемому параметру.
К сожалению в TServiceApplication такой возможности нет. Но можно подправить установку сервиса в SvcMrg.pas - процедура TServiceApplication.RegisterServices(Install, Silent: Boolean);
И для полноты, как опередить запустивший процесс?
← →
DiamondShark © (2005-06-05 15:31) [12]
> Alex Konshin © (05.06.05 10:49) [7]
> Вызов сервиса отличается тем что ему не передаются параметры,
> т.е. ParamCount = 0.
Очень даже передаются.
← →
Ученик (2005-06-05 15:51) [13]>-=GUEST=- (05.06.05 15:05) [11]
Вариант Win95/98, Win2k, ...
uses
TlHelp32;
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
dwProcessID, dwParentProcessID: DWord;
hSnapshot: THandle;
ProcessEntry: TProcessEntry32;
ProcessList: TStringList;
begin
ProcessList := TStringList.Create;
try
dwProcessID := GetCurrentProcessID;
dwParentProcessID := 0;
hSnapshot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if hSnapshot <> INVALID_HANDLE_VALUE then try
ProcessEntry.dwSize := SizeOf(ProcessEntry);
if Process32First(hSnapshot, ProcessEntry) then begin
repeat
ProcessList.AddObject(ExtractFileName(ProcessEntry.szExeFile), TObject(ProcessEntry.th32ProcessID));
if ProcessEntry.th32ProcessID = dwProcessID then
dwParentProcessID := ProcessEntry.th32ParentProcessID;
until not Process32Next(hSnapshot, ProcessEntry)
end
finally
CloseHandle(hSnapshot)
end;
if dwParentProcessID <> 0 then begin
i := ProcessList.IndexOfObject(TObject(dwParentProcessID));
if i <> -1 then
ShowMessage(ProcessList[i])
end
finally
ProcessList.Free
end
end;
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.051 c