Форум: "Основная";
Текущий архив: 2004.08.29;
Скачать: [xml.tar.bz2];
ВнизКак определить что сервис зарегестрирован ? Найти похожие ветки
← →
dream (2004-08-11 08:08) [0]Есть сервис на delphi, как определить что он зарегестрирован в списке сервисов ?
← →
Digitman © (2004-08-11 08:47) [1]см. OpenSCManager + EnumServicesStatus
← →
dream (2004-08-11 09:06) [2]> Digitman © (11.08.04 08:47) [1]
Можно по подробнее ?
← →
Digitman © (2004-08-11 09:07) [3]
> Можно по подробнее ?
поподробнее о ЧЕМ ?
← →
dream (2004-08-11 09:09) [4]Не могу найти как определить ? блин код запутынный.
Нашёл :
function TForm1.CreateServiceList: boolean;
var
SCManagerHandle : THandle;
lpServices : array of TEnumServiceStatus;
pcbBytesNeeded, lpServicesReturned, lpResumeHandle: DWORD;
ServiceMode, ServiceStatus : integer;
i : integer;
S : string;
LI : TListItem;
begin
// Очистка списка
ListView1.Items.Clear;
// 1. Подключениемся к менеджеру сервисов
SCManagerHandle := OpenSCManager(nil, nil, GENERIC_READ);
case rgServiceMode.ItemIndex of
0 : ServiceMode := SERVICE_WIN32;
1 : ServiceMode := SERVICE_DRIVER;
2 : ServiceMode := SERVICE_WIN32 or SERVICE_DRIVER;
end;
case rgServiceStatus.ItemIndex of
0 : ServiceStatus := SERVICE_ACTIVE;
1 : ServiceStatus := SERVICE_INACTIVE;
2 : ServiceStatus := SERVICE_ACTIVE or SERVICE_INACTIVE;
end;
// ResumeHandle := 0 !! Это важно, т.к. это задает пречисление
// сервисов с начала
lpResumeHandle := 0;
// 2. Перечисление сервисов (размер буфера = 0 - мы определяем, какой реально
// размер необходим для списка сервисов
EnumServicesStatus(SCManagerHandle,
ServiceMode,
ServiceStatus,
lpServices[0], // !! В описании функции ошибка - эдесь должен быть указатель на массив элементов
0,
pcbBytesNeeded,
lpServicesReturned,
lpResumeHandle);
// 3. Настройка размера массива
SetLength(lpServices, pcbBytesNeeded div SizeOf(TEnumServiceStatus));
// 4. Повторный запрос списка сервисов (размер массива соответствует определенному на шаге 2)
lpResumeHandle := 0;
EnumServicesStatus(SCManagerHandle,
ServiceMode,
ServiceStatus,
lpServices[0],
Length(lpServices) * SizeOf(TEnumServiceStatus),
pcbBytesNeeded,
lpServicesReturned,
lpResumeHandle);
// Вывод полученных данных в ListView1
for i := 0 to lpServicesReturned - 1 do begin
LI := ListView1.Items.Add;
LI.Caption := lpServices[i].lpServiceName;
LI.SubItems.Add(lpServices[i].lpDisplayName);
S := "??";
// Расшифровка кода состояния
case lpServices[i].ServiceStatus.dwCurrentState of
SERVICE_STOPPED : S := "Сервис не запущен";
SERVICE_START_PENDING : S := "Сервис в процессе запуска";
SERVICE_STOP_PENDING : S := "Сервис в процессе завершения";
SERVICE_RUNNING : S := "Сервис запущен";
SERVICE_CONTINUE_PENDING : S := "Сервис в процессе запуска после временной оснановки";
SERVICE_PAUSE_PENDING : S := "Сервис в процессе временной оснановки";
SERVICE_PAUSED : S := "Сервис временно оснановлен";
end;
LI.SubItems.Add(S);
end;
// 5. Закрытие менеджера
CloseServiceHandle(SCManagerHandle);
end;
Но не хочет работать глючит , что то подключать нужно блин
← →
Digitman © (2004-08-11 09:24) [5]EnumServicesStatus - это ф-ция, и она возвращает строго определенный результат, показывающий успешность или неуспешность ее выполнения .. почему ты его не анализируешь ?
> lpServices[0], // !! В описании функции ошибка - эдесь должен
> быть указатель на массив элементов
глупости.
LPENUM_SERVICE_STATUS lpServices, // pointer to service status buffer
массив или не массив ты подставляешь - это твои проблемы, а для Win32 это должен быть просто указатель на некий буфер
> не хочет работать глючит
что говорит-то хоть ?
← →
dream (2004-08-11 09:58) [6]> Digitman © (11.08.04 09:24) [5]
Если это обычная функция то пожайлуста напиши её если не трудно. я в этом новичёк и разбираться времени нету проект встал :(
В долгу не останусь
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.08.29;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.034 c