2011-11-14 24 views
5

Tôi đã viết một ứng dụng mà trên bộ đếm thời gian gửi nhật ký qua thư. Ứng dụng này có giao diện người dùng tối giản và khi tệp cấu hình ở đó, nó có thể bắt đầu mà không cần sự tương tác với người dùng.Chuyển đổi giữa EXE độc lập và dịch vụ windows

Hiện tại, ứng dụng này là ứng dụng VCL, nhưng trong một số trường hợp sẽ tốt hơn nếu có dịch vụ (theo cách này khi chạy trên máy chủ không cần mở phiên người dùng chỉ để chạy ứng dụng).

Bạn đề xuất gì để có cả hai thế giới? Trong một số kịch bản đơn giản (tổ chức smal, chỉ với 3 chiếc và không có người quản lý CNTT) "dịch vụ không" là tốt vì dễ hiểu và dễ sử dụng hơn, nhưng trong tổ chức lớn hơn, thiếu dịch vụ là một vấn đề.

Có thể có dịch vụ và dịch vụ không cùng một lúc không? Làm thế nào để đạt được điều này? Tôi không muốn làm cho việc triển khai phức tạp hơn, những gì tôi có trong đầu là một số lệnh dòng lệnh: khi chạy với dòng lệnh paramenters nó có thể là một dịch vụ, nếu không phải là một ứng dụng bình thường ... Làm thế nào để làm điều này?).

+5

Một trong những câu trả lời của tôi cho một câu hỏi khác nhau cung cấp cho mã mà làm những gì bạn muốn: http://stackoverflow.com/questions/6594152 –

+3

thể trùng lặp của [Một ứng dụng Delphi độc lập mà cũng có thể được cài đặt như cửa sổ dịch vụ] (http://stackoverflow.com/questions/2387383/a-standalone-delphi-application-that-can-also-be-installed-as-windows-service) – gabr

Trả lời

5

OK ... cách tốt nhất là phát triển ứng dụng 'dịch vụ' và 'phi dịch vụ' trong cùng một dự án. Như đã giải thích ở đây: A standalone Delphi application that can also be installed as windows service. Vì vậy, bạn có thể sử dụng cùng một ứng dụng như dịch vụ hoặc ứng dụng độc lập.

Nếu bạn muốn có cả hai trên cùng một máy PC, nó phức tạp hơn: bạn phải thêm, chỉ trong ứng dụng độc, các chức năng:

  • Verifiy nếu dịch vụ đang chạy và hoạt động.
  • Nếu dịch vụ là chạy và hoạt động, bạn phải đối thoại với nó thay vì chạy quy trình độc lập .
0

Điều tôi làm là có một dự án riêng biệt chỉ dành cho mục đích phát triển. Tôi chỉ cần tạo một biểu mẫu, sau đó tạo ra dịch vụ và thực hiện các cuộc gọi mong đợi.

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

Tôi sẽ tạo một applet bảng điều khiển đặt uf cấu hình cần thiết cho ứng dụng của bạn và sau đó chuyển đổi ứng dụng của bạn thành dịch vụ. Ứng dụng bảng điều khiển của bạn cũng có thể bắt đầu, dừng và khởi động lại dịch vụ, v.v.

Bây giờ bạn có thể sử dụng tốt nhất cả hai thế giới.

John

+0

Do applet bảng điều khiển vẫn còn tồn tại? Tôi nghĩ họ đã chết sau Vista. Tôi cũng đấu tranh để thấy khá một applet bảng điều khiển giải quyết mọi thứ như thế nào. Có lẽ hôm nay tôi đang chậm. –

+0

Nếu bạn phải tạo một applet bảng điều khiển, bạn sẽ cần Delphi XE2, và để xây dựng một applet bảng điều khiển 32 và 64 bit. –

+0

@WarrenP ... Ứng dụng CP 32 bit sẽ chạy trên hệ thống/hệ điều hành 64 bit, dịch vụ 32 bit cũng sẽ chạy trên hệ thống/hệ điều hành 64 bit. – John

Các vấn đề liên quan