Einzelnen Beitrag anzeigen

Benutzerbild von cherry
cherry

Registriert seit: 14. Nov 2005
561 Beiträge
 
RAD-Studio 2009 Ent
 
#1

Eigener Dienst beendet nicht korrekt...

  Alt 15. Jan 2009, 08:54
Hi

Mein Dienst beendet manchmal korrekt, manchmal nicht. Nicht nur beim manuellen start/stop sondern auch beim Herunterfahren des PC's...

Wenn ich den Dienst manuell beende erhalte ich manchmal die Meldung: "Dienst konnte nicht beendet werden" und die Function "Update Userinfo" wird nicht mehr ausgeführt.

Beim Herunterfahren des PCs werden ja alle Dienste beendet, doch meiner scheint dies nicht korrekt zu tun, denn auch hier wird die Function "Update Userinfo" nicht immer ausgeführt.

Delphi-Quellcode:
procedure TMeinDienst.ServiceShutdown(Sender: TService);
begin
  UpdateUserInfo(Username, false);
  LogFile.LOG(msg0009);
end;
Hier das Execute...

Delphi-Quellcode:
procedure TMeinDienst.ServiceExecute(Sender: TService);
begin
  //ShowMessage('OnExecute - begin');
  while not Terminated do
  begin
    TRY
      // try to catch a user
      if Username <> 'then
      begin
        // AUTOSCAN
        // THIS SECTION IS FOR USER WHO JUST LOGGED IN
        if (Username <> GetSession) or (Welcome = False) then
        begin
          ChangeUser;
          if Username <> 'then // its important to get sure that the username has really been catched
          begin
            Welcome := True;
            LogFile.Log(msg0004+GetIPAddress);
            // check if the user already exists in the database
            CheckDBforUser(ADOQuery1,ADOStoredProc1);
            // Save to database that the user is logged in
            UpdateUserInfo(Username, true);
            // get all info from User Table "t_bb_user"
            ADOQuery3.Close;
            ADOQuery3.Parameters.ParamValues['@username'] := username;
            ADOQuery3.Open;

            // If the logged in user is not on the blacklist it will autoscan now
            if CheckUserOnBlacklist(Username) = False then
            begin
              // autostart scan now, but first get defined scan_type from db!
              case ADOQuery3scan_type.AsInteger of
                0: begin ScanAndWriteToDB(True, stNoScanNoWrite); end;
                1: begin ScanAndWriteToDB(True, stFullScanWriteJustRootFoldersSize); end;
                2: begin ScanAndWriteToDB(True, stFullScanAndWrite); end;
              end;
            end
            else
            begin
              // user is on blacklist, but login info will be saved
              ScanAndWriteToDB(True, stNoScanNoWrite);
              LogFile.Log(Username+msg0016);
            end;

            // activate TCP server
            if not assigned(TCPServer) then
              ActivateTCPServer;

          end;
        end
        else if StartManScan then
        begin
          try
            // check if the user already exists in the database, else it will create him
            if Username <> 'then
            begin
              CheckDBforUser(ADOQuery1,ADOStoredProc1);
              ScanAndWriteToDB(False, stFullScanAndWrite);
            end;
          finally
            // its very important to reset the variable StartManScan
            StartManScan := False;
            // send to the requesting host that the scan is complete now...
            Connect;
            TCPClient.IOHandler.WriteLn(IntToStr(CmdScanFinished));
            // disconnect
            Disconnect;
          end;
        end;
      end
      else
      begin
        ChangeUser;
        Welcome := False;
      end;
    EXCEPT
      on e:Exception do
      begin
        LogFile.LOG(msg0000+e.Message);
        // maby there are some tcp actions pending...
        Disconnect;
        if fulllog then LogFile.Log(msg0039);
      end;
    END;
      ServiceThread.ProcessRequests(False);
      Sleep(1000);
  end;
  //ShowMessage('OnExecute - end');
end;
Bitte wirf doch mal ein Blick drauf.. PS: und wenn du gleich andere Sachen siehst die man anders strukturieren müsste, dann lass es mich wissen...

LG
Cherry
Ist das nur mein Gefühl, oder ist die ganze Welt verrückt geworden!?
  Mit Zitat antworten Zitat