Service Application działa tylko przez kilka sekund

0

Zmagam się z aplikacją serwisową. Początkowo napisałem zwykły programik ale później przerobiłem na service i poza tym że nie działa tak jak powinen to mam jeszcze większy problem: klikam RUN i po paru sekundach sama się zamyka bez zgłaszania żadnych błędów. Co dziwniejsze to samo się dzieje jak tworzę nową przez File>New> Service application, pustą w środku. Po paru sekundach działania sama się wyłącza [???]
Spotkał się ktoś z takim zachowaniem?
win xp i delphi 7.2 pro SE

0

Tak spotkał się z taką sytuacją...
w kodzie masz mieć:

procedure TService.ServiceExecute(Sender: TService);
begin;
while not Terminated do
ServiceThread.ProcessRequests(True);
end;

0

dodałem i nic się nie zmieniło

0

Zapewne apliacja robi jakis Exception.

Zrób sobie tak, żeby wszystko co robisz opakowane było klauzulami try ... except ... end i w momencie wystąpienia błędu - zrzucaj to do pliku.

Jak sobie z tym nie poradzisz - daj znać - wrzuce ci przykłąd jak ja to robię.

0

no właśnie nie robi zupełnie nic
jak mam aplikację z template to też się sama zamyka po 10s mniejwięcej. delphi nie pokazuje błędów

unit:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs;

type
  TService1 = class(TService)
    procedure ServiceExecute(Sender: TService);
  private
    { Private declarations }
  public
    function GetServiceController: TServiceController; override;
    { Public declarations }
  end;

var
  Service1: TService1;

implementation

{$R *.DFM}

procedure ServiceController(CtrlCode: DWord); stdcall;
begin
  Service1.Controller(CtrlCode);
end;

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

procedure TService1.ServiceExecute(Sender: TService);
begin
 while not Terminated do
    ServiceThread.ProcessRequests(True);
end;

end.

dodałem tam jak widać

procedure TService1.ServiceExecute(Sender: TService);
begin
while not Terminated do
ServiceThread.ProcessRequests(True);
end;

ale to nic nie zmieniło

dpr:

program Service;

uses
  SvcMgr,
  Unit1 in 'Unit1.pas' {Service1: TService};

{$R *.RES}

begin
  Application.Initialize;
  Application.CreateForm(TService1, Service1);
  Application.Run;
end.
0

No, aplikacja z template po mojemu nie robi nic i dlatego się po prostu kończy.
Może to Ci pomoże:
http://www.tolderlund.eu/delphi/service/service.htm

0

Aplikacja otwierająca się jako service działa przed zalogowaniem i chyba o to chodzi? Bo w przypadku restartu zdalnego serwera nie następuje logowanie i nie działałyby nasze aplikacje. Jest jednak inne wyjście. Spotkałem się z programem (nie pamiętam jego nazwy) który po zainstalowaniu i zresetowaniu systemu powoduje automatyczne zalogowanie a następnie (po uruchomieniu programów w autostarcie) wylogowuje użytkownika a te programy oczywiście dalej działają, czyli już nie muszą działać jako service. Nie wiem czy łatwo napisać taki program. Tamten kosztował jakieś 20 dolarów.

0

jak się okazało gotowa i zainstalowana usługa działa po restarcie normalnie - tzn się sama nie wyłącza. tylko przy uruchamianiu spod delphi tak dziwnie się zachowuje

0

Nie dziwnie. Normalnie.

Aplikacja komplilowana pod usługę ma się skompilować i tyle. Po skompilowaniu masz ją wystartować (NET START <service_name>), a przed rekompilacją zastopować (NET STOP <service_name>) - oczywiście wszystko możesz robić z poziomu "Managera Usług", ale mnie jest wygodniej robić to z poziomu wiersza poleceń - szczególnie jak masz przygotowane skrypty - możesz jednym ruchem wyczyścić całe środowisko.

Nie wiem jak jest w najnowszych Delphi (ponoć w 2010 coś dorobili), ale nie można np debuggować wprost Aplikacji usługowych (ja radze sobie logowaniem działania aplikacji do plików logu). W każdym razie w Delphi 7 jest to najnormalniejsze zachowanie.

0

hmm.. tak z ciekawosci zapytam: a jakby uruchomic delphi jako "SYSTEM", to by cos zmienilo? moze daloby sie debugowac ;]

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0