Obtener nombre de servicio dado un archivo ejecutable
#1
Escrito 08 agosto 2013 - 01:23
En esta oportunidad me gustaría que por favor me ayudaran a saber cómo obtengo un nombre de servicio de windows si tengo como parámetro el filename del archivo ejecutable.
Ya sé como iniciar, detener y borrar un servicio de windows, pero todos los tengo a partir del nombre del servicio. Lo que necesito en sí es que a través de delphi 7 yo tenga el nombre de servicio si sé el nombre y la ruta del ejecutable.
El S.O. es windows 7. Espero no ser confuso.
Les agradezco mucho su ayuda. Que estén bien
#2
Escrito 08 agosto 2013 - 05:11
#3
Escrito 09 agosto 2013 - 01:13
Yo tengo un código -copiado de nosedonde- que hace esto: le das un nombre de exe, y te busca el handler al proceso, y tu ya de ese handler buscas lo que necesites de nombre de servicio y esas cosas. No estoy seguro del todo de que sirva para servicios, supongo que si, yo lo uso para excel y esas cosas "normales".
//Sabemos 'WINWORD.EXE', dame un THandle del proceso para hacerle putadillas function GetProcHandle(ExeFileName: string): THandle; var ContinueLoop: BOOL; FSnapshotHandle: THandle; FProcessEntry32: TProcessEntry32; begin result:= 0; FSnapshotHandle:= CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); FProcessEntry32.dwSize:= Sizeof(FProcessEntry32); ContinueLoop:= Process32First(FSnapshotHandle, FProcessEntry32); while integer(ContinueLoop) <> 0 do begin if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) = UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) = UpperCase(ExeFileName))) then begin result:= OpenProcess(PROCESS_ALL_ACCESS, FALSE, FProcessEntry32.th32ProcessID); break; end; ContinueLoop:= Process32Next(FSnapshotHandle, FProcessEntry32); end; CloseHandle(FSnapshotHandle); end;
#4
Escrito 09 agosto 2013 - 08:26
Antes de nada estaría bien que nos contases un poco de lo que quieres conseguir con todo esto, a lo mejor te damos ideas diferentes de hacer lo que tu quieres
#5
Escrito 12 agosto 2013 - 12:45
¿Y si hay mas de un servicio con el mismo ejecutable? ... algo no tan extraño por cierto
Hola amigo Seoane gracias por responder. Es un solo servicio con un ejecutable.
#6
Escrito 12 agosto 2013 - 01:06
No creo que sabiendo el exe puedas saber el nombre del servicio, pero no soy un gran conocedor del tema, lo que supongo que si puedes hacer es a partir del nombre localizar el servicio si está funcionanado, y de aqui tirar del handler del proceso, y el exe que está detras.
Yo tengo un código -copiado de nosedonde- que hace esto: le das un nombre de exe, y te busca el handler al proceso, y tu ya de ese handler buscas lo que necesites de nombre de servicio y esas cosas. No estoy seguro del todo de que sirva para servicios, supongo que si, yo lo uso para excel y esas cosas "normales".
delphi
//Sabemos 'WINWORD.EXE', dame un THandle del proceso para hacerle putadillas function GetProcHandle(ExeFileName: string): THandle; var ContinueLoop: BOOL; FSnapshotHandle: THandle; FProcessEntry32: TProcessEntry32; begin result:= 0; FSnapshotHandle:= CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); FProcessEntry32.dwSize:= Sizeof(FProcessEntry32); ContinueLoop:= Process32First(FSnapshotHandle, FProcessEntry32); while integer(ContinueLoop) <> 0 do begin if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) = UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) = UpperCase(ExeFileName))) then begin result:= OpenProcess(PROCESS_ALL_ACCESS, FALSE, FProcessEntry32.th32ProcessID); break; end; ContinueLoop:= Process32Next(FSnapshotHandle, FProcessEntry32); end; CloseHandle(FSnapshotHandle); end;
Amigo Sergio gracias por responder. Veo que el código me puede ser de mucha utilidad cuando tenga más conocimiento acerca del tema, porque lo entiendo muy poco , ya que estoy comenzando a desarrollar servicios de windows. Pero voy a tomar en cuenta! , Muchas gracias