Ir al contenido


Foto

Obtener nombre de servicio dado un archivo ejecutable


  • Por favor identifícate para responder
5 respuestas en este tema

#1 systemix

systemix

    Member

  • Miembros
  • PipPip
  • 15 mensajes

Escrito 08 agosto 2013 - 01:23

Buen día muchachos!

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 ;)
  • 0

#2 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 08 agosto 2013 - 05:11

¿Y si hay mas de un servicio con el mismo ejecutable? ... algo no tan extraño por cierto
  • 0

#3 Sergio

Sergio

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.092 mensajes
  • LocationMurcia, España

Escrito 09 agosto 2013 - 01:13

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
  1. //Sabemos 'WINWORD.EXE', dame un THandle del proceso para hacerle putadillas
  2. function GetProcHandle(ExeFileName: string): THandle;
  3. var
  4.   ContinueLoop: BOOL;
  5.   FSnapshotHandle: THandle;
  6.   FProcessEntry32: TProcessEntry32;
  7. begin
  8.   result:= 0;
  9.   FSnapshotHandle:= CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  10.   FProcessEntry32.dwSize:= Sizeof(FProcessEntry32);
  11.   ContinueLoop:= Process32First(FSnapshotHandle, FProcessEntry32);
  12.   while integer(ContinueLoop) <> 0 do begin
  13.     if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) = UpperCase(ExeFileName))
  14.     or (UpperCase(FProcessEntry32.szExeFile) = UpperCase(ExeFileName))) then begin
  15.       result:= OpenProcess(PROCESS_ALL_ACCESS, FALSE, FProcessEntry32.th32ProcessID);
  16.       break;
  17.     end;
  18.     ContinueLoop:= Process32Next(FSnapshotHandle, FProcessEntry32);
  19.   end;
  20.   CloseHandle(FSnapshotHandle);
  21. end;


  • 0

#4 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 09 agosto 2013 - 08:26

Para obtener el nombre del servicio no tendríamos mas que enumerar los servicios instalados en el sistema y comparar su ejecutable con el que queremos buscar, para eso podríamos usar la API o WMI, pero el problema sigue siendo ¿qué pasa si hay mas de un servicio con el mismo ejecutable?

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
  • 0

#5 systemix

systemix

    Member

  • Miembros
  • PipPip
  • 15 mensajes

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.
  • 0

#6 systemix

systemix

    Member

  • Miembros
  • PipPip
  • 15 mensajes

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
  1. //Sabemos 'WINWORD.EXE', dame un THandle del proceso para hacerle putadillas
  2. function GetProcHandle(ExeFileName: string): THandle;
  3. var
  4.   ContinueLoop: BOOL;
  5.   FSnapshotHandle: THandle;
  6.   FProcessEntry32: TProcessEntry32;
  7. begin
  8.   result:= 0;
  9.   FSnapshotHandle:= CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  10.   FProcessEntry32.dwSize:= Sizeof(FProcessEntry32);
  11.   ContinueLoop:= Process32First(FSnapshotHandle, FProcessEntry32);
  12.   while integer(ContinueLoop) <> 0 do begin
  13.     if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) = UpperCase(ExeFileName))
  14.     or (UpperCase(FProcessEntry32.szExeFile) = UpperCase(ExeFileName))) then begin
  15.       result:= OpenProcess(PROCESS_ALL_ACCESS, FALSE, FProcessEntry32.th32ProcessID);
  16.       break;
  17.     end;
  18.     ContinueLoop:= Process32Next(FSnapshotHandle, FProcessEntry32);
  19.   end;
  20.   CloseHandle(FSnapshotHandle);
  21. 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 (y)
  • 0




IP.Board spam blocked by CleanTalk.