Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-05-2006
FD2004 FD2004 is offline
Miembro
 
Registrado: sep 2004
Posts: 12
Poder: 0
FD2004 Va por buen camino
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
Responder Con Cita
  #2  
Antiguo 19-05-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
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');

Última edición por seoane fecha: 19-05-2006 a las 20:34:36.
Responder Con Cita
  #3  
Antiguo 20-05-2006
FD2004 FD2004 is offline
Miembro
 
Registrado: sep 2004
Posts: 12
Poder: 0
FD2004 Va por buen camino
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
Responder Con Cita
  #4  
Antiguo 20-05-2006
FD2004 FD2004 is offline
Miembro
 
Registrado: sep 2004
Posts: 12
Poder: 0
FD2004 Va por buen camino
Dónde encuentro la unidad WinSvc

Busqué en Google y en los discos cd, encuentro menciones, pero no los archivos.

Gracias, Lucio
Responder Con Cita
  #5  
Antiguo 20-05-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
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
Responder Con Cita
  #6  
Antiguo 15-06-2006
juanpe juanpe is offline
Miembro
 
Registrado: oct 2004
Posts: 46
Poder: 0
juanpe Va por buen camino
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.
Responder Con Cita
  #7  
Antiguo 15-06-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
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.
Responder Con Cita
  #8  
Antiguo 15-06-2006
juanpe juanpe is offline
Miembro
 
Registrado: oct 2004
Posts: 46
Poder: 0
juanpe Va por buen camino
Buenas tardes, Seoane
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.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Detener ejecucion de programa Luli Varios 8 04-05-2006 05:52:12
Detener aplicacion trex2000 Varios 4 22-04-2005 23:08:37
Detener y arrancar Dlls ( 3 capas ) cso2000 API de Windows 0 21-01-2005 16:23:38
detener un bucle con un boton cancelar... dmariscal Varios 7 13-07-2004 12:52:47
Detener un bucle lfidanza Varios 5 25-06-2003 00:36:14


La franja horaria es GMT +2. Ahora son las 20:36:49.


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