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

Вниз

Как определить что сервис зарегестрирован ?   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.056 c
4-1089647238
DarkLord
2004-07-12 19:47
2004.08.29
Послать текст в скрытое консольное приложение


1-1092645668
Bizon`s
2004-08-16 12:41
2004.08.29
Update Delphi6


3-1091592599
ydv
2004-08-04 08:09
2004.08.29
Хитрый sql-запрос


4-1089989762
Dima_Delphi
2004-07-16 18:56
2004.08.29
Требуется нормальная стаюильная работа с COM портом под NT.


14-1092311413
WondeRu
2004-08-12 15:50
2004.08.29
Компоненты для работы с шифрованием по ...