Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   Detener un servicio NT (https://www.clubdelphi.com/foros/showthread.php?t=31858)

FD2004 19-05-2006 19:59:03

Detener un servicio NT
 
Hola,

Necesito detener un servicio NT desde Delphi,

Equivalente al comando

net stop "Nombre del servicio" de NT

Hay algún modo simple ( o llamar a un archivo de comandos "detener.cmd" ? )

Gracias,

Lucio

seoane 19-05-2006 20:32:34

No se si sera lo bastante simple, pero puedes usar esta funcion para detener un servicio:

Código Delphi [-]
uses WinSvc;

procedure StopService(Nombre: String);
var
 ServiceControlManager: SC_HANDLE;
 Service: SC_HANDLE;
 ServiceStatus: SERVICE_STATUS;
begin
  ServiceControlManager:= OpenSCManager(nil, nil, SC_MANAGER_CONNECT);
  if ServiceControlManager <> 0 then
  begin
    Service:= OpenService(ServiceControlManager,PChar(Nombre),SERVICE_ALL_ACCESS);
    if Service <> 0 then
    begin
      if QueryServiceStatus(Service, ServiceStatus) then
      begin
        if ServiceStatus.dwCurrentState <> SERVICE_STOPPED  then
          ControlService(Service, SERVICE_CONTROL_STOP, ServiceStatus);
      end;
      CloseServiceHandle(Service);
    end;
    CloseServiceHandle(ServiceControlManager);
  end;
end;

Para usarla solo tienes que pasarle el nombre del servicio que quieres detener:
Código Delphi [-]
  StopService('NombreDelServicio');

FD2004 20-05-2006 03:07:37

Pruebo y vuelvo
 
Muchas gracias,

La pruebo y vuelvo para cerrar el caso.

No se si en este foro es de estilo poner [Resuelto] en la cabeza del hilo.

Buen fin de semana,

Lucio

FD2004 20-05-2006 16:16:47

Dónde encuentro la unidad WinSvc
 
Busqué en Google y en los discos cd, encuentro menciones, pero no los archivos.

Gracias, Lucio

seoane 20-05-2006 16:38:11

WinSvc forma parte de las units que trae delphi, por lo menos en la version en la que yo trabajo (Delphi 7), aunque supongo que en versiones anteriores tambien debe de existir.

¿Porque quieres saber su localizacion exacta? ¿No te funciona con solo añadirlo a las uses? De todas formas yo la tengo aqui:

Código:

C:\Archivos de programa\Borland\Delphi7\Source\Rtl\Win\WinSvc.pas

juanpe 15-06-2006 12:49:54

Hola quisiera indicar que soy incapaz de hacer que me funcione, estoy intentando parar los procesos de Interbase Guardian e Interbase Server.

El problema es que en service no me devuelve valor <> 0 .
Service:= OpenService(ServiceControlManager,PChar(Nombre),SERVICE_ALL_ACCESS);

El nombre del servicio, lo estoy tomando del nombre dentro de Herramientas Administrativas, Servicios (locales), Nombre.
Decir que el windows es Xp y que el user es administrador.

Gracias por vuestra ayuda.:)

seoane 15-06-2006 13:19:42

El "Nombre" no es el que aparece en la Herramientas administrativas/Servicios an la columna con el titulo nombre. El nombre que necesitamos lo podemos obtener pulsando con el boton derecho sobre el servicio, vamos a propiedades y ahi parace el nombre del servicio y el nombre para mostrar, que es el que se muestra en la columna antes mencionada, el que nos interesa es el primero el nombre del servicio. Si ya lo estabas haciendo asi, entonces no se donde puede estar el problema, yo llevo usando esa misma funcion mucho tiempo y nunca tuve problemas con ella.

juanpe 15-06-2006 17:54:42

Buenas tardes, Seoane :o
Te explico, el nombre lo estaba cogiendo correctamente, pero lo que me ha engañado ha sido que la pagina no refrescaba el cambio de estado del proceso. Es decir al comienzo, esta iniciado y mediante la aplicacion lo paraba, pero no cambiaba el estado.
Hasta que cerrando la ventana y volviendola a abrir vi que estaba detenido.


Muchas gracias por responder tan pronto.
Un saludo.


La franja horaria es GMT +2. Ahora son las 19:56:10.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi