AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi bekomme den service nicht zum laufen...
Thema durchsuchen
Ansicht
Themen-Optionen

bekomme den service nicht zum laufen...

Ein Thema von sunshineh · begonnen am 22. Okt 2008 · letzter Beitrag vom 23. Okt 2008
Antwort Antwort
Seite 1 von 2  1 2      
sunshineh

Registriert seit: 8. Apr 2008
38 Beiträge
 
#1

bekomme den service nicht zum laufen...

  Alt 22. Okt 2008, 14:36
Hallo

ich habe ein deprimierendes Problem.

Ich nutze Delphi 2007 und Windows XP und habe meine Anwendung als in einer VLC-Anwendung fertig geschrieben und getestet. Es funktioniert alles! Natürlich habe ich darauf geachtet, dass über die VLC-Oberfläche keine Anwendereingaben gemacht werden und auch nicht ausgegeben wird! Der Input für die Anwendung ist ein ini-File und der Output mehrere txt-Dateien.

Als alles gegangen ist, habe ich eine Service-Anwendung angelegt und meine Funktionalität in diese Service-Anwendung übertragen. Da passiert aber gar nichts, es wird keine Datei angelegt, nichts reingeschrieben, einfach gar nicht. Ich habe auch Interaktive auf true gesetzt und den Beispielcode von einem funktionierenden Beispielprogramm aus dem Internet reinkopiert, aber auch das geht bei mir nicht.

Ich weiß mir nun nicht mehr zu helfen, weiß nicht, was ich noch testen kann

Weiß wer von euch vielleicht einen Rat?!

Lieben Gruß,

sunshineh
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#2

Re: bekomme den service nicht zum laufen...

  Alt 22. Okt 2008, 15:50
mmh

Hast Du den Service installiert?
Ist er bei den Diensten aufgeführt und steht er dort als gestartet?
Poste mal den Quelltext, so ohne weitere Info ist das doch ein bisserl zu sehr Glaskugel
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#3

Re: bekomme den service nicht zum laufen...

  Alt 22. Okt 2008, 15:51
Code steht hier: http://www.delphiforum.de/viewtopic.php?t=87448
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#4

Re: bekomme den service nicht zum laufen...

  Alt 22. Okt 2008, 15:56
Hallo,

muss das nichtServiceThread.ProcessRequests(true); heißen?
  Mit Zitat antworten Zitat
sunshineh

Registriert seit: 8. Apr 2008
38 Beiträge
 
#5

Re: bekomme den service nicht zum laufen...

  Alt 22. Okt 2008, 16:43
funktioniert mit true und mit false nicht
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#6

Re: bekomme den service nicht zum laufen...

  Alt 22. Okt 2008, 17:43
Versuch's mal damit:
Delphi-Quellcode:
unit Unit1;

interface


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


type
  TTestservice = class(TService)
    procedure ServiceStart(Sender: TService; var Started: Boolean);
    procedure ServiceExecute(Sender: TService);
  private
    { Private-Deklarationen }
  public
    function GetServiceController: TServiceController; override;
    { Public-Deklarationen }
  end;


var
  Testservice: TTestservice;
  LogFile: TStringList;


implementation


{$R *.DFM}


const LogFileName = 'c:\test\Service_log.txt';


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


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


procedure TTestservice.ServiceExecute(Sender: TService);
begin
  while not Terminated do
  begin
    ServiceThread.ProcessRequests(true);
    // Sleep(5000);
    LogFile.Add(DateTimeToStr(Now)+' OnExecute');
    LogFile.SaveToFile(LogFileName);
  end;
end;


procedure TTestservice.ServiceStart(Sender: TService; var Started: Boolean);
begin
  LogFile.Add(DateTimeToStr(Now)+' Service gestartet');
  LogFile.SaveToFile(LogFileName);
end;

initialization
  LogFile:=TStringList.Create;

finalization
  LogFile.Free;

end.
Die Stringliste gehört jetzt nicht mehr zur Klasse, sondern ist eine globale Variabel. Vermutlich ist das nicht sauber und nicht threadsicher. In meinen Services mach' ich das Logging so:
Delphi-Quellcode:
procedure TSystemmonitor.ErrorLog(sError : String; iDebugLevel : Integer);
Var
          f : TextFile;
begin
  If iDebugLevel <= Self.DebugLevel Then Begin
    AssignFile(f,LogFileName);
    If FileExists(LogFileName) Then Append(f) Else ReWrite(f);
    WriteLn(f,DateToStr(Now) + ' ' + TimeToStr(Now) + ' ' + sError);
    CloseFile(f);
  End;
end;

procedure TSystemmonitor.ServiceStart(Sender: TService; var Started: Boolean);
begin
  Self.ErrorLog('ServiceStart=' + IntToStr(Ord(Started)),1);
end;
Wenn ein Service tagelang läuft und viel protokolliert, dürfte eine Stringliste auf Dauer zu einem Speicherfresser mutieren.
  Mit Zitat antworten Zitat
sunshineh

Registriert seit: 8. Apr 2008
38 Beiträge
 
#7

Re: bekomme den service nicht zum laufen...

  Alt 23. Okt 2008, 10:08
Funktioniert leider auch nicht

Kann mir jemand ein kurzes funktionsfähiges Beispiel zur Verfügung stellen, in dem eine Log-Datei erzeugt wird?!

Wäre wirklich sehr dankbar, weiß nicht, wo da der Wurm drin steckt!
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#8

Re: bekomme den service nicht zum laufen...

  Alt 23. Okt 2008, 10:23
Hallo,

mein Beispiel habe ich erst gepostet, nachdem es bei mir lief.
  Mit Zitat antworten Zitat
sunshineh

Registriert seit: 8. Apr 2008
38 Beiträge
 
#9

Re: bekomme den service nicht zum laufen...

  Alt 23. Okt 2008, 10:51
Das hatte ich befürchtet

Ich habe nun nochmal ein neuen Dienst angelegt, die Bezeichnungen angepasst und deinen Code reinkopiert. Dazu habe ich Interaktiv auf "true" gesetzt und die exe ohne Fehlermeldung erstellt.

Dann gehe ich wie folgt vor:
1.cmd
2.ich gehe in den Ordner C:\test und rufe die Projekt.exe /install auf -> ich erhalte die Meldung, das der Dienst erfolgreich installiert ist
3.ich klicke unter Verwaltung -> Dienste auf meinen Dienst Testservice und drücke auf Dienst starten. Das wird auch erfolgreich gemacht
ich schaue in de n Ordner C:\test und da ist leider wieder keine txt Datei!!!

Muss ich irgendwo Rechte vergeben, oder was mache ich falsch!!! Ich brauch dieses sch...Programm so dringend
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#10

Re: bekomme den service nicht zum laufen...

  Alt 23. Okt 2008, 11:34
liegt der Dienst auch unter c:\test?

mache mal vom cmd aus folgendes:
Code:
D:\Delphi7\Projects>project1 /install

D:\Delphi7\Projects>net start Testservice
TestService wird gestartet.
TestService wurde erfolgreich gestartet.

D:\Delphi7\Projects>net stop Testservice
TestService wird beendet...
TestService wurde erfolgreich beendet.

D:\Delphi7\Projects>project1 /uninstall

D:\Delphi7\Projects>
sieht das bei Dir genauso aus?

Die Ausgabedatei muss jetzt so aussehen:
Code:
23.10.2008 11:16:37 Service gestartet
23.10.2008 11:16:55 OnExecute
Wenn es Rechte sein könnten:
Was für Rechte hast Du auf dem Rechner?

Geh mal in die Systemsteuerung zu den Diensten und rufe die Eigenschaften des Dienstes auf. Dort gibt es den Reiter Anmelden. Gib' dort bei Dieses Konto ein Konto an, dass garantiert alle Rechte hat (also z. B. das lokale Adminkonto des Rechners). Dienst stoppen und Dienst starten, wenn's dann geht, ist es ein Rechteproblem.

Wenn's nicht geht, poste bitte den Quelltext so, wie er jetzt ist, dann werd' ich es nochmal versuchen.
Wenn irgendmöglich, verabschiede Dich bei der Protokollierung von der Stringliste. Schreibe jede Zeile mit WriteLn(f,'text') in die Logdatei. Du bekommst im Dienst einfach nicht mit, wenn bei der Arbeit mit der Stringliste eine Exception auftritt. Ich weiß nicht, wie ein Dienst intern abläuft und ob die Stringliste bei jedem Aufruf von ServiceExecute initialisiert ist, sprich, ob ein einmaliges Create für die gesamte Laufzeit des Dienstes ausreicht. Wenn nicht, kracht das hier mit ziemlicher Sicherheit und ServiceExecute wird mit 'ner Exception abgebrochen. Das bekommst Du von außen nicht mit.
Versuch' die Protokollierung erstmal nur so (mit fest verdrahtetem Dateiname, die steht dann halt im Verzeichnis der Exe):
Delphi-Quellcode:
AssignFile(f,'LogFileName');
If FileExists('LogFileName') Then Append(f) Else ReWrite(f);
WriteLn(f,DateToStr(Now) + ' ' + TimeToStr(Now) + ' ' + 'Steht hier jetzt auch wirklich der Text in der Datei');
CloseFile(f);
Auch wenn hier andauernd geprüft wird, ob eine Datei schon existiert und sie andauernd auf und zu gemacht wird. Zuerst muss 'ne Billigvariante laufen, bevor es auch was komplizierter werden darf.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:00 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz