Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Флейм > Надо изменить название службы


Автор: кварк 9.7.2003, 11:54
Встала задача переименовать службу (которая показывается в списке служб Win2K) (Мы люди добрые - ничего плохого не подумайте :-))

Всю жизнь думал, что в реестре поискать - и все найдешь. До дела дошло - и так не оказалось.

Самое интуитивное место: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Служба
Там есть параметры: DisplayName и Description, я их меняю - в списке служб описание меняется, а название - нет. Как поменять название?


Автор: p0s0l 14.7.2003, 01:55
Вот процедурину написал - проверял, вроде работает.
Только тебе надо знать название службы (а не её выводимое имя).
Если название не знаешь - то:
OpenSCManager (...);
EnumServicesStatus (..., services, ...); // services - получает инфу о сервисах
// в services хранятся lpServiceName, lpDisplayName
ищешь там службу у которой lpDisplayName = старое название, берешь у нее lpServiceName
и юзаешь эту процедурину.
P.S. тебе нужен будет модуль WinSVC - если у тебя его нет, то скажи.

Код

uses WinSVC;
procedure SetNameForService(const service, displayName : string);
var
 sm, h : SC_Handle;
 siz : cardinal;
 info : PQueryServiceConfig;
 ok : boolean;
begin
 sm := OpenSCManager (nil, nil, SC_MANAGER_ALL_ACCESS);
 h := OpenService (sm, PChar(service), SERVICE_QUERY_CONFIG+SERVICE_CHANGE_CONFIG);
 if h <> 0 then
 begin
   siz := 0;
   QueryServiceConfig (h, info, siz, siz); // получили размер
   GetMem (info, siz);
   ok := false;
   if QueryServiceConfig (h, info, siz, siz) then
   begin
     ok := ChangeServiceConfig (h,
                        info^.dwServiceType,
                        info^.dwStartType,
                        info^.dwErrorControl,
                        info^.lpBinaryPathName,
                        info^.lpLoadOrderGroup,
                        nil,
                        info^.lpDependencies,
                        info^.lpServiceStartName,
                        nil,
                        PChar(displayName));
   end;
   FreeMem (info);
   CloseServiceHandle (h);
 end;
 CloseServiceHandle (sm);
 if not ok then MessageBox (0, 'Ошибка', 'Ошибка', MB_TASKMODAL+MB_ICONERROR);
end;


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)