Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-1092235109
ron
2004-08-11 18:38
2004.08.29
Добрый день есть список файлов


1-1092139498
Андеев А.Р
2004-08-10 16:04
2004.08.29
xls-ы собрать в один


14-1091855407
Daniel.
2004-08-07 09:10
2004.08.29
Что делать, если USB-устройств больше, чем USB-портов?


1-1092197326
dream
2004-08-11 08:08
2004.08.29
Как определить что сервис зарегестрирован ?


14-1091866279
Stany
2004-08-07 12:11
2004.08.29
"Удаленный рабочий стол"





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский