Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Dienste im Allgemeinen und im Besonderen unter XP (https://www.delphipraxis.net/37776-dienste-im-allgemeinen-und-im-besonderen-unter-xp.html)

UweR 10. Jan 2005 12:41


Dienste im Allgemeinen und im Besonderen unter XP
 
Hallo Leute,

ich habe das Problem das ich einen Dienst geschrieben habe der eigentlich nichts machen soll außer einen TCP-Server aufmachen und dann RPC-Kommandos auswerten. Unter XP hat dieses gemeint den Dienst wieder anhalten zu können. Als Workaround lasse ich jetzt meinen Dienst die Uhrzeit auslesen und irgendwohin schreiben. Dass funktioniert auch, aber der Dienst krallt sich jetzt Rechenzeit was auch nicht besonders schön ist. Deshalb noch mal meine Frage ob es da nicht eine andere Möglichkeit gibt XP mitzuteilen das es den Dienst gefälligst nicht wieder anhalten soll.

Ich habe auch schon mal probiert nur dann die Uhrzeit auszulesen wenn ich XP unter mir habe, aber sobald ich in meinem Dienst OSVersionEx aufrufe kann ich den Dienst nicht mehr starten. Es kommt diese wunderschöne Meldung mit interner Windowsfehler und an seinen Administrator wenden.

Kann mir irgendjemand helfen oder vielleicht nen Tip geben

Luckie 10. Jan 2005 12:44

Re: Dienste im Allgemeinen und im Besonderen unter XP
 
Ich würde den Grund ermitteln, warum Windows deinen Dienst wieder anhält. Zeig doch mal etwas Quellcode, irgendwas machst du da wohl falsch.

UweR 10. Jan 2005 13:18

Re: Dienste im Allgemeinen und im Besonderen unter XP
 
Hallo Luckie,

XP hält meinen Dienst mit dem folgenden Hinweis an:

Zitat:

Einige Dienste werden automatisch angehalten wenn sie sich im Leerlauf befinden.
XP hat mit dem Hinweis das sich der Dienst im Leerlauf befindet auch nicht ganz unrecht da er nur einen TCP-Server startet.

W2k läßt ihn einfach durchlaufen.



Den Aufruf von OSVersionEx mag zumindest W2k nicht, XP habe ich gerade nicht vorrätig. Der sieht bei mir so aus:

Delphi-Quellcode:
procedure TCocoControl.ServiceCreate(Sender: TObject);
var
   os : TOSVERSIONINFO;

begin
   asLastLogOff := TStringList.Create;
   try
      os.dwOSVersionInfoSize := SizeOf(os);
      GetVersionEx(os);

      if (os.dwMajorVersion >= 5) and (os.dwMinorVersion >=1) then
         OSXP := TRUE
      else
         OSXP := FALSE;
   except
      on E: Exception do begin
         OSXP := TRUE;
         WriteLog('OSXP.log', E.Message);
      end;
   end;
end; // procedure ServiceCreate
Sobald ich GetVersionEx auskommentiere no Problem. Der Dienst läuft unterm Systemkonto, Rechte sollten also vorhanden sein.

Luckie 10. Jan 2005 13:20

Re: Dienste im Allgemeinen und im Besonderen unter XP
 
Zitat:

Zitat von UweR
Den Aufruf von OSVersionEx mag zumindest W2k nicht,

Aha. Schön. Und wie äußert sich das? Ich glaube kaum, dass in deinem Log drinne steht ":kotz: Mag ich nicht." :roll:

Und das:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  os          : TOSVERSIONINFO;
  OSXP        : Boolean;
begin
  try
    os.dwOSVersionInfoSize := SizeOf(os);
    GetVersionEx(os);

    if (os.dwMajorVersion >= 5) and (os.dwMinorVersion >= 1) then
      ShowMessage('XP')
    else
      Showmessage('nicht XP');
  except
    on E: Exception do
    begin
      ShowMessage(e.Message);
    end;
  end;
end;
tut es bei mir in einer normalen Anwendung ganz prima.

UweR 10. Jan 2005 13:54

Re: Dienste im Allgemeinen und im Besonderen unter XP
 
Delphi-Quellcode:
tut es bei mir in einer normalen Anwendung ganz prima.
Bei mir auch, komisch!!! :gruebel:

Es kommt halt die Meldung das der Dienst nicht gestartet werden kann, der Dienst keine Fehler zurück gibt und entweder ein interner Windows- oder Dienstfehler vorliegt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:37 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