Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   servicios para Windows (https://www.clubdelphi.com/foros/showthread.php?t=77177)

KingOfDragons 29-12-2011 18:24:12

servicios para Windows
 
Buenas tardes y gracias a todos por su atención, estoy haciendo un servicio de windows para que me notifique cada vez que hay un cambio en una base de datos el problema es que no logro hacer que este servicio inicie de forma automática al iniciar el equipo ya intente haciendo un comando mediante ms-dos pero da la casualidad que el usuario no tiene permisos de administrador y no me deja utilizar este comando y con el comando runas me pide contraseña y no se como ponerla de forma automática, no se si estoy programando algo mal o como puedo forzar a windows a que inicie este servicio.

Les paso el codigo que tengo en el servicio:

Código Delphi [-]
procedure ServiceController(CtrlCode: DWord); stdcall;
begin
  NotificacionesCeri.Controller(CtrlCode);
end;

function TNotificacionesCeri.GetServiceController: TServiceController;
begin
  Result := ServiceController;
end;

procedure TNotificacionesCeri.ServiceAfterInstall(
  Sender: TService);
var
  Reg: TRegistry;
begin
  Reg := TRegistry.Create(KEY_READ or KEY_WRITE);
  try
    Reg.RootKey := HKEY_LOCAL_MACHINE;
    if Reg.OpenKey('\SYSTEM\CurrentControlSet\Services\' + Name, false) then
    begin
      Reg.WriteString('Description', 'Esta aplicacion envia notificaciones a diferentes personas de las novedades registradas');
      Reg.CloseKey;
    end;
  finally
    Reg.Free;
  end;
end;

procedure TNotificacionesCeri.ServiceCreate(
  Sender: TObject);
begin
  ADOQuery1.Open;
  r:=ADOQUery1.RecordCount;
end;

procedure TNotificacionesCeri.ServiceExecute(
  Sender: TService);
begin
temporizador.Enabled := True;
  while not Terminated do
    ServiceThread.ProcessRequests(True);
  temporizador.Enabled := False;
end;

procedure TNotificacionesCeri.temporizadorTimer(
  Sender: TObject);
begin
  Consulta;
end;

Muchas gracias a todos por su apoyo

Saludos

thecidmx 29-12-2011 19:38:03

espero te sirva
 
Cuando necesitemos ejecutar alguna aplicación como un servicio de Windows podemos usar srvany. Esto significa “Run any program as a service”, srvany es un proceso genérico de Windows NT/2000/XP que permite que cualquier programa se ejecute como un servicio mas.

Lo que debemos hacer para lograr esto es lo siguiente:

1- srvany viene incluido en el Microsoft Windows NT Resource Kit junto con otras aplicaciones que sirven para realizar tareas administrativas, de automatización e instalación de software y demás. Podemos descargarnos el Kit entero desde aqui o simplemente podemos descargarnos la aplicación que nos interesa en este momento (srvany) desde esta
dirección.

2- Una vez que ya tengamos los archivos necesario (srvany.exe e instsrv.exe) lo siguiente es hacer que nuestro programa corra como un servicio mas, para ello pondremos a los archivos que descargamos juntos en un directorio. Luego abriremos una ventana de Símbolo de Sistema de MS-DOS (Inicio –> Ejecutar –> cmd) y navegaremos hasta el directorio donde tenemos los archivos que descargamos. Una vez allí escribiremos los siguientes comandos:

ruta\INSTSRV.EXE [mi servicio] ruta\SRVANY.EXE

Para no tener problemas en donde dice ruta pongan la ruta del directorio en el que estan los archivos junto con la letra asignada a la unidad. [mi servicio] es el nombre del servicio que deseamos correr. Puede ser cualquier nombre pero es recomendable que sea descriptivo. Si todo salio bien nos mostrara un mensaje diciéndonos que el servicio fue agregar satisfactoriamente.

Para asegurarnos que fue así debemos revisar el Registro de Windows, para realizar esto abriremos el Editor de Registro (Inicio –> Ejecutar –> regedit) y nos posicionaremos en la siguiente clave:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\[mi servicio]

Si podemos ubicar el servicio creado anteriormente es porque todo salio bien.

3- Ahora seleccionaremos nuestro servicio, luego nos dirigimos al menú Edición –> Nuevo –> Clave, el nombre que le pondremos es “Parameters”. Seleccionaremos la clave “Parameters” y nos dirigimos nuevamente al menú Edición –> Nuevo –> Valor alfanumérico y le ponemos el nombre “Application”, veremos que se agrega este valor lo seleccionamos y hacemos clic con el botón derecho y seleccionamos “Modificar” y en “Información del valor” pondremos la ruta completa de la aplicación con la extensión.

ejemplo: C:\Archivos de programa\aplicacion\miaplicacion.exe

4- Cerramos el Editor de Registro.

Por defecto un servicio creado recientemente esta configurado para que inicie la próxima vez que se reinicie el sistema, si deseamos configurarlo para que lo haga en este momento o cambiar la forma en que inicia el mismo a Manual por ejemplo lo podemos hacer desde la ventana de Servicios (Inicio –> Ejecutar — > services.msc)

NOTA: para borrar un servicio agregado lo que debemos hacer es abrir una ventana de Símbolo de Sistema de MS-DOS y dirigirnos al directorio donde tenemos los archivos que descargamos, una vez ahí escribimos lo siguiente:

INSTSRV.EXE [nombre del servicio] REMOVE


NOTA: este procedimiento fue probado en Windows 2000/XP/2003 Server, no fue probado en Vista y el archivo SRVANY.EXE debe quedar siempre en el mismo directorio mientras el servicio este corriendo, de lo contrario no funcionara, alguna aplicaciones deben recibir parámetros al momento de ejecutarlas, asegúrese de que sea así al momento de agregar el servicio,

Nota importante : debe poseer permisos de Administrador para realizar este proceso.

Espero que sea de utilidad saludos

thecidmx 29-12-2011 19:48:18

link de descarga
 
http://www.microsoft.com/latam/techn...estrella2.mspx, de ahi bajas el programa q necesitas, si no tienes acceso a la maquina del cliente, lo puedes hacer desde una aplicacion que realize el comando q instale la aplicacion como servicio, y para ejecutar ese programa q el usuario lo ejecute como administrador.

KingOfDragons 29-12-2011 23:00:00

No se si sea lo mismo que yo estoy haciendo a lo que tu me explicas yo solo uso la linea 'Notificaciones.exe /install' y me funciona y si aparece como servicio pero siempre que reinicio el equipo se detiene sin importar si lo tengo en automatico, lo reviso el registro y tambien aparece la ruta y todo pero no se si existe algo mas que hacer para forzar a que inicie

Saludos.


La franja horaria es GMT +2. Ahora son las 04:28:23.

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