Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Описание сервиса, Где вводится описание сервиса 
:(
    Опции темы
oleg2s
Дата 24.5.2012, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 12.5.2012

Репутация: нет
Всего: 1



Доброе время суток.
Пишу сервис (пытаюсь). Подскажите, где (как) ввести описание сервиса, которое выводится в списке сервисов в колонке "описание"?
PM MAIL   Вверх
kami
Дата 24.5.2012, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 15
Всего: 72



Стандартно (существующими в VCL возможностями) - нигде.
Меняется с помощью ChangeServiceConfig2 с параметром SERVICE_CONFIG_DESCRIPTION.
Пошукайте гуглом эту функцию, что-нибудь найтись должно. Если нет - набросаю пример, но позже, сейчас Delphi не под рукой.
PM MAIL WWW   Вверх
oleg2s
Дата 25.5.2012, 05:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 12.5.2012

Репутация: нет
Всего: 1



Нашел вот такую строку, но она выдает ошибку, что ChangeServiceConfig2 и SERVICE_CONFIG_DESCRIPTION не определены
Код

Result := ChangeServiceConfig2(Service,  SERVICE_CONFIG_DESCRIPTION, @Info);


В каком модуле определяется функция?
Как заполнить Info?

Это сообщение отредактировал(а) oleg2s - 25.5.2012, 05:51
PM MAIL   Вверх
MetalFan
Дата 25.5.2012, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 16
Всего: 128



oleg2s, а можно напрямую в реестр записать... это описание сервиса.


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
kami
Дата 25.5.2012, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 15
Всего: 72



Цитата(MetalFan @  25.5.2012,  09:28 Найти цитируемый пост)
а можно напрямую в реестр записать

Можно-то оно конечно можно smile
Помнится, на delphimaster была достаточно большая дискуссия на эту тему - пользоваться функцией или реестром. В конечном итоге (само собой - к единому знаменателю так и не пришли), но был сделан промежуточный вывод, что использовать реестр для этой цели можно, но не совсем правильно, т.к. установка Description через реестр документирована неявно и использовать ее можно так же как и остальное недокументированное - на свой страх и риск. 
Правда, этот "страх и риск" действует от начала появления сервисов и как минимум до Win7 smile
PM MAIL WWW   Вверх
oleg2s
Дата 25.5.2012, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 12.5.2012

Репутация: нет
Всего: 1



Цитата(kami @ 25.5.2012,  12:11)
Цитата(MetalFan @  25.5.2012,  09:28 Найти цитируемый пост)
а можно напрямую в реестр записать

Можно-то оно конечно можно smile
Помнится, на delphimaster была достаточно большая дискуссия на эту тему - пользоваться функцией или реестром. В конечном итоге (само собой - к единому знаменателю так и не пришли), но был сделан промежуточный вывод, что использовать реестр для этой цели можно, но не совсем правильно, т.к. установка Description через реестр документирована неявно и использовать ее можно так же как и остальное недокументированное - на свой страх и риск. 
Правда, этот "страх и риск" действует от начала появления сервисов и как минимум до Win7 smile

Напрямую писать в реестр мне очень не хочется, т.к. считаю в данном случае, это дурной тон.

PM MAIL   Вверх
northener
Дата 25.5.2012, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: нет
Всего: 20



Цитата(kami @  25.5.2012,  12:11 Найти цитируемый пост)
Помнится, на delphimaster была достаточно большая дискуссия на эту тему

http://www.delphimaster.net/view/4-1130765521


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
kami
Дата 25.5.2012, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 15
Всего: 72



northener, точно, я же тогда участвовал в этой ветке smile даже пытался умные мысли (которых у меня тогда не было, но я об этом не знал smile ) толкать.
Цитата(oleg2s @  25.5.2012,  14:24 Найти цитируемый пост)
Напрямую писать в реестр мне очень не хочется, т.к. считаю в данном случае, это дурной тон.
Цитата(oleg2s @  25.5.2012,  05:50 Найти цитируемый пост)
В каком модуле определяется функция?

В стандартных модулях Delphi - нет определения. Можно или объявить самому, или воспользоваться JEDI API (правда, там объявлены не все структуры и константы, воспринимаемые рассматриваемой функцией, но того что есть хватит). Если дальнейшие планы сильно затрагивают использование WinAPI - настоятельно рекомендую скачать. Если же нет - то проще объявить в своем модуле.
Цитата(oleg2s @  25.5.2012,  05:50 Найти цитируемый пост)
Как заполнить Info?

Туда "запихивается" указатель на предварительно заполненную структуру SERVICE_DESCRIPTION. Само собой - объявления SERVICE_DESCRIPTION в стандартных модулях тоже нет.

Кстати, небольшое дополнение - правильно работает только ChangeServiceConfig2W. C A вариантом какие-то траблы - не полностью воспринимает LPStr в каких-то параметрах.

Какая версия Delphi?
Сам какой-нибудь код набросал уже? А то мне не терпится выложить на всеобщее поругание "усовершенствованный" SvcMgr.pas smile


Это сообщение отредактировал(а) kami - 25.5.2012, 18:29
PM MAIL WWW   Вверх
northener
Дата 26.5.2012, 02:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: нет
Всего: 20



Цитата(kami @  25.5.2012,  18:25 Найти цитируемый пост)
northener, точно, я же тогда участвовал в этой ветке

delphimaster помнит своих героев! 
smile


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
MetalFan
Дата 27.5.2012, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 16
Всего: 128



Цитата(kami @  25.5.2012,  18:25 Найти цитируемый пост)
А то мне не терпится выложить на всеобщее поругание "усовершенствованный" SvcMgr.pas

Ну так выкладывай, коли не терпится!
Пригодиться я думаю. А мы с радостью "покритикуем" или "похвалим")
Только давай отдельной темой в разделе WinApi.


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
oleg2s
Дата 28.5.2012, 06:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 12.5.2012

Репутация: нет
Всего: 1



Цитата(kami @  25.5.2012,  18:25 Найти цитируемый пост)
Сам какой-нибудь код набросал уже? А то мне не терпится выложить на всеобщее поругание "усовершенствованный" SvcMgr.pas 

А что я могу написать, если функция не описана и выдает ошибки?
Я поэтому и задаю вопросы. Хотелось бы конкретных пример описания сервиса без лишнего кода.

PM MAIL   Вверх
kami
Дата 28.5.2012, 07:11 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 15
Всего: 72



Цитата(oleg2s @  28.5.2012,  06:45 Найти цитируемый пост)
А что я могу написать, если функция не описана и выдает ошибки?

понятно. Плохо, что не воспользовался
Цитата(kami @  25.5.2012,  18:25 Найти цитируемый пост)
JEDI API (правда, там объявлены не все структуры и константы, воспринимаемые рассматриваемой функцией, но того что есть хватит)

Используемые типы:
Код

  SERVICE_DESCRIPTION = record
    lpDescription: PChar;
  end;
  TServiceDescription = SERVICE_DESCRIPTION;
  PServiceDescription = ^SERVICE_DESCRIPTION;

  TChangeServiceConfig2 = function(scHandle: SC_HANDLE; dwInfoLevel: DWord; lpInfo: pointer): BOOL; stdcall;

глобальные переменные:
Код

var
  advapi32: THandle;
  ChangeServiceConfig2: TChangeServiceConfig2;

Инициализация функций. Я почти всегда (не знаю почему) использую для этого секцию инициализации:
Код

initialization
advapi32 := LoadLibrary('advapi32.dll');
if advapi32 <> 0 then
    ChangeServiceConfig2 := GetProcAddress(advapi32, 'ChangeServiceConfig2W');
else
    ChangeServiceConfig2 := nil;

finalization
FreeLibrary(advapi32);


ну и сама работа:
Код

function TService.GetServiceHandles(var SCManagerHandle, ServiceHandle: THandle): Boolean;
begin
  Result := False;
  SCManagerHandle := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
  if SCManagerHandle <> 0 then
    begin
      ServiceHandle := OpenService(SCManagerHandle, PChar(Name), SERVICE_ALL_ACCESS);
      if ServiceHandle <> 0 then
        Result := True
      else
        CloseServiceHandle(SCManagerHandle);
    end;
end;

procedure TService.FreeServiceHandles(SCManagerHandle, ServiceHandle: THandle);
begin
  CloseServiceHandle(ServiceHandle);
  CloseServiceHandle(SCManagerHandle);
end;

procedure TService.SetDescription(const Value: String);
var
  Desc: TServiceDescription;
  hSCM, hService: THandle;
begin
  if Assigned(ChangeServiceConfig2) then
    if GetServiceHandles(hSCM, hService) then
      begin
        FDescription := Value;
        //Desc := AllocMem(SizeOf(TServiceDescription));
        Desc.lpDescription := AllocMem(Length(Description) * SizeOf(Char) + SizeOf(Char));

        Move(Description[1], Desc.lpDescription^, Length(Description) * SizeOf(Char));
        ChangeServiceConfig2(hService, SERVICE_CONFIG_DESCRIPTION, @Desc);

        FreeMem(Desc.lpDescription);
        //FreeMem(pDesc);

        FreeServiceHandles(hSCM, hService);
      end;
end;

PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0591 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.