2011-11-14 19 views
5

He escrito una aplicación que en el temporizador envía registros por correo. Esta aplicación tiene una interfaz de usuario minimalista y una vez que un archivo de configuración está allí, puede comenzar sin la necesidad de una interacción con el usuario.Alternar entre EXE independiente y el servicio de Windows

Actualmente es un VCL formularios de solicitud, pero en algunos casos, sería bueno tener un servicio (de esta manera cuando se ejecuta en un servidor que no hay necesidad de abrir una sesión de usuario sólo para ejecutar la aplicación).

¿Qué sugieres para tener los dos mundos? En un escenario simple (organización pequeña, con solo 3 unidades y sin administrador de TI), un "no servicio" es bueno porque es más fácil de entender y usar, pero en una organización más grande, la falta de servicio es un problema.

¿Es posible tener un servicio y no servicio al mismo tiempo? ¿Cómo lograr esto? No quiero que el despliegue sea más complejo, lo que tengo en mente es un cambio de línea de comando: cuando se ejecuta con parámetros de línea de comandos, puede ser un servicio, si no una aplicación normal ... ¿Cómo hacer esto?).

+5

Una de mis respuestas a una pregunta diferente da código que hace lo que quiere: http://stackoverflow.com/questions/6594152 –

+3

posible duplicado de [una aplicación Delphi independiente que también puede ser instalado como servicio de windows] (http://stackoverflow.com/questions/2387383/a-standalone-deaplication-the-can-bear-installed-as-windows-service) – gabr

Respuesta

5

OK ... la mejor manera es desarrollar la aplicación 'servicio' y 'no servicio' en el mismo proyecto. Como se explica aquí: A standalone Delphi application that can also be installed as windows service. Así que puede usar la misma aplicación como servicio o como una aplicación independiente.

Si usted quiere tener ambos en el mismo PC, es más complicado: hay que añadir, en la aplicación independiente, las funciones:

  • verifiy si el servicio se está ejecutando y activa.
  • Si el servicio es en ejecución y activo, tiene que dialogar con él en lugar de ejecutar el proceso independiente .
0

Lo que hago es tener un proyecto separado que es solo para uso de desarrollo. Solo creo un formulario, luego crea el servicio y hace las llamadas esperadas.

unit fTestHarness; 

    interface 

    uses 
    uMyServiceModule, 
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms; 

    type 
    TfrmCentralTest = class(TForm) 
     Label1: TLabel; 
     Label2: TLabel; 
     procedure FormCreate(Sender: TObject); 
     procedure FormClose(Sender: TObject; var Action: TCloseAction); 
    private 
     { Private declarations } 
    public 
     { Public declarations } 
    end; 

    var 
    frmTest: TfrmTest; 

    implementation 

    {$R *.dfm} 

    procedure TfrmCentralTest.FormCreate(Sender: TObject); 
    var 
    bStarted : boolean; 
    begin 
    bStarted := False; 
    MyService := TMyService.Create(self); 
    MyService.ServiceStart(nil, bStarted); 
    end; 

    procedure TfrmCentralTest.FormClose(Sender: TObject; var Action: TCloseAction); 
    var 
    bStopped : boolean; 
    begin 
    MyService.ServiceStop(nil, bStopped); 
    end; 

    end. 
1

me gustaría crear un applet de panel de control que establece uf la configuración necesaria para su aplicación y luego convertir su aplicación en un servicio. El applet del panel de control también podría iniciar, detener y reiniciar el servicio, etc.

Ahora tiene lo mejor de ambos mundos.

John

+0

¿Todavía existen applets en el panel de control? Creí que se extinguieron después de Vista. También me cuesta ver cómo un applet del panel de control resuelve algo. Tal vez estoy siendo lento hoy. –

+0

Si tiene que crear un applet del panel de control, necesitará Delphi XE2 y crear un applet del panel de control de 32 y 64 bits. –

+0

@WarrenP ... Los applets de CP de 32 bits se ejecutarán en un sistema/sistema operativo de 64 bits, un servicio de 32 bits también se ejecutará en un sistema/sistema operativo de 64 bits. – John

Cuestiones relacionadas