2011-11-14 25 views
5

Zamanlayıcıda günlükleri posta ile gönderen bir uygulama yazdım. Bu uygulama minimalist bir kullanıcı arayüzüne sahiptir ve bir kez bir config dosyası var kullanıcı ile bir etkileşim ihtiyacı olmadan başlayabilir.Bağımsız EXE ve windows hizmeti arasında geçiş yapma

Şu anda bir VCL Forms uygulamasıdır, ancak bazı durumlarda bir hizmetin olması iyi olacaktır (bu şekilde bir sunucuda çalışırken, yalnızca uygulamayı çalıştırmak için bir kullanıcı oturumu açmaya gerek yoktur).

Hem dünyalara sahip olmanız için ne önerirsiniz? Bazı basit senaryolarda (sadece 3 adet ve hiçbir BT yöneticisi olmayan küçük organizasyon) bir “hizmet dışı” iyidir çünkü daha kolay anlaşılır ve kullanılır, ancak daha büyük bir organizasyonda hizmet eksikliği bir sorundur.

Aynı anda servis ve servisi olmayan bir servis mümkün mü? Bunu nasıl başarabilirim? Ben dağıtım daha karmaşık yapmak istemiyorum, aklımda olan bazı komut satırı anahtarı: komut satırı paramenter ile çalıştırıldığında normal bir uygulama değilse, bir hizmet olabilir ... Bu nasıl yapılır?).

+5

biri istediğini yaptığı kodu verir: http://stackoverflow.com/questions/6594152 olarak da monte edilebilir [Bir bağımsız Delphi uygulamasının –

+3

olası yinelenen windows servisi] (http://stackoverflow.com/questions/2387383/a-standalone-delphi-application-that-can-also-be-installed-as-windows-service) – gabr

cevap

5

... Tamam iyi yolu 'hizmeti' ve aynı projede 'olmayan hizmet' uygulamasını geliştirmektir. Burada açıklandığı gibi: A standalone Delphi application that can also be installed as windows service. Bu nedenle, aynı uygulamayı servis olarak veya tek başına uygulama olarak kullanabilirsiniz. Aynı PC'de ikisine de sahip olmak istiyorsanız

, bu daha karmaşıktır: Eğer tek başına bir uygulama içinde, işlevleri eklemek zorunda: hizmetinin çalışır ve aktif

  • doğrulanana eğer. hizmet koşu ve aktifse
  • , sen yalnız süreci standı koşuyoruz yerine onunla iletişim var.
0

Ne yapmam geliştirme kullanımı içindir ayrı projesi var olduğunu. Sadece bir form yaratıyorum, o zaman bu hizmet yaratır ve çağrıları bekler.

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

Uygulamanız için gereken yapılandırmayı ayarlayan ve ardından uygulamanızı bir hizmete dönüştüren bir kontrol paneli uygulaması oluştururdum. Kontrol paneli uygulamanız aynı zamanda hizmeti başlatabilir, durdurabilir ve yeniden başlatabilir.

Artık iki dünyanın da en iyisine sahipsiniz.

John

farklı bir soruya benim cevap
+0

Kontrol paneli uygulamaları hala var mı? Vista'dan sonra öldüler sanıyordum. Ayrıca bir kontrol paneli uygulamasının hiçbir şeyi nasıl çözdüğünü de görmeye çalışıyorum. Belki bugün sadece yavaş davranıyorum. –

+0

Bir kontrol paneli uygulaması yapmanız gerekiyorsa, Delphi XE2'ye ve 32 ve 64 bitlik kontrol paneli uygulaması oluşturmaya ihtiyacınız olacak. –

+0

@WarrenP ... 32 bit CP uygulamaları bir 64 bit sistemde/OS'de çalışır, 32 bitlik bir servis de 64 bit sistemde/OS'de çalışır. – John

İlgili konular