Bueno, de mi no se esconde nadie
Si el nombre se puede escoger, ¿también el nombre del ejecutable?
Buscar servicio por el nombre del ejecutable:
Código Delphi
[-]
uses WinSvc;
function isInstalled2(Nombre: String): Boolean;
var
ServiceControlManager: SC_HANDLE;
Status, P: PEnumServiceStatus;
Size, Count, Resume, i: DWORD;
Service: SC_HANDLE;
Config: PQueryServiceConfig;
begin
Result:= FALSE;
ServiceControlManager:= OpenSCManager(nil, nil, SC_MANAGER_CONNECT or
SC_MANAGER_ENUMERATE_SERVICE);
if ServiceControlManager <> 0 then
begin
GetMem(Status,Sizeof(TEnumServiceStatus));
try
EnumServicesStatus(ServiceControlManager,SERVICE_WIN32,SERVICE_STATE_ALL,
Status^,0,Size,Count,Resume);
if GetLastError = ERROR_MORE_DATA then
begin
FreeMem(Status);
GetMem(Status,Size);
if EnumServicesStatus(ServiceControlManager,SERVICE_WIN32,SERVICE_STATE_ALL,
Status^,Size,Size,Count,Resume) then
begin
P:= Status;
for i:= 1 to Count do
begin
if Result then
break;
Service:= OpenService(ServiceControlManager,P.lpServiceName,
GENERIC_READ);
if Service <> 0 then
begin
GetMem(Config,Sizeof(QUERY_SERVICE_CONFIG));
try
QueryServiceConfig(Service,Config,0,Size);
if GetLastError = ERROR_INSUFFICIENT_BUFFER then
begin
FreeMem(Config);
GetMem(Config,Size);
if QueryServiceConfig(Service,Config,Size,Size) then
if AnsiSameText(
Copy(ExtractFileName(String(Config.lpBinaryPathName)),1,
Length(Nombre)), Nombre) then
Result:= TRUE;
end;
finally
FreeMem(Config);
end;
CloseServiceHandle(Service);
end;
inc(P);
end;
end;
end;
finally
FreeMem(Status);
end;
CloseServiceHandle(ServiceControlManager);
end;
end;
No estoy seguro del nombre del ejecutable del servicio de MySql pero según google comienza por mysql, si lo tienes instalado compruebalo.
Código Delphi
[-]
if not isInstalled2('mysql') then
begin
end;
¿Y ahora que Roman?