AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Unerklärbare Zugriffsverletzung

Ein Thema von ByTheTime · begonnen am 18. Mär 2014 · letzter Beitrag vom 24. Mär 2014
Antwort Antwort
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.961 Beiträge
 
Delphi 12 Athens
 
#1

AW: Unerklärbare Zugriffsverletzung

  Alt 18. Mär 2014, 21:24
Ich glaube ich mache ein Debug Projekt, das ist nicht so viel Code, da mach ich mir die "Mühe"
Wie schon erwähnt wurde reicht es auch, wenn du Delphi mit Adminrechten startest. Dann kannst du dich einfach mit dem Dienst verbinden...

Wenn es direkt beim Starten passiert, kannst du folgendes nutzen, damit der Dienst wartet bis du den Debugger verbunden hast:
Delphi-Quellcode:
while not IsDebuggerPresent do
  Sleep(100);
Und danach direkt einen Haltepunkt setzen z.B.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
ByTheTime

Registriert seit: 24. Sep 2011
Ort: Frankfurt
297 Beiträge
 
Delphi XE2 Architect
 
#2

AW: Unerklärbare Zugriffsverletzung

  Alt 18. Mär 2014, 21:36
@Sir_Rufo: Okay, habe mir gedacht das er darauf hinauswill. Merke ich mir für die Zukunft...
@jaenicke: Ja stimmt... Habe ich irgendwie dran vorbei gedacht... Und danke für den Tipp mit dem "IsDebuggerPresent"

Noch eine Anmerkung: Eben beim experimentieren ist mir folgendes aufgefallen (man betrachte die for-Schleife welche für das Senden verantwortlich ist):
Delphi-Quellcode:
            for i := 0 to High(Jobs) do
            begin
              { ... }

              if EventCount > 0 then
              begin
                Log(False, 'All Events: ' + IntToStr(Length(Events))); // Geht!

                SendMail(i);
              end;
            end;
Und hier die "andere" Version;

Delphi-Quellcode:
            for i := 0 to High(Jobs) do
            begin
              { ... }

              if EventCount > 0 then
              begin
                Log(False, IntToStr(Length(Events))); // GEHT NICHT!!!

                SendMail(i);
              end;
            end;
Ich debug mich da jetzt durch und dann bin ich mal gespannt, was da genau passiert Denn der Code von oben hat mich nur nochmehr verwirrt
Lukas
  Mit Zitat antworten Zitat
ByTheTime

Registriert seit: 24. Sep 2011
Ort: Frankfurt
297 Beiträge
 
Delphi XE2 Architect
 
#3

AW: Unerklärbare Zugriffsverletzung

  Alt 18. Mär 2014, 22:23
Achso, hier nochmal meine Profi Log-Funktion

Delphi-Quellcode:
procedure Log(ShowDateTime: Boolean; s: String);
var
  LList: TStringList;
  i: Integer;
begin
  FLogCritSect.Enter;

  try
    LList := TStringList.Create;

    if not IsFileInUse(AppDataPath + 'Jobs.jlf') then
    begin
      try
        if FileExists(AppDataPath + 'Log.txt') then
          LList.LoadFromFile(AppDataPath + 'Log.txt');

        for i := 0 to Puffer.Count - 1 do
          LList.Add(Puffer[i]);

        if ShowDateTime then
          LList.Add('[' + DateTimeToStr(Now) + ']: ' + s)
        else
          LList.Add(s);

        LList.SaveToFile(AppDataPath + 'Log.txt');
      finally
        LList.Free;
        Puffer.Text := EmptyStr;
      end;
    end
    else if ShowDateTime then
      Puffer.Add('[' + DateTimeToStr(Now) + ']: ' + s)
    else
      Puffer.Add(s);
  finally
    FLogCritSect.Leave;
  end;
end;
Wenn man in der SendMail-Prozedur eine Zeile hinzufügt funktioniert alles:
Delphi-Quellcode:
{ ... }

Log(False, ''); // Löst alle Probleme

for i := 0 to High(Events) do
  if Events[i].Mail = Jobs[JobID].Mail then
  begin
    { ... }
  end;

{ ... }
Allerdings soll das nicht die Lösung sein... Ich melde mich nochmal!

Gruß
Lukas
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.374 Beiträge
 
Delphi 12 Athens
 
#4

AW: Unerklärbare Zugriffsverletzung

  Alt 18. Mär 2014, 22:55
Zitat:
Delphi-Quellcode:
    LList := TStringList.Create;
    if not IsFileInUse(AppDataPath + 'Jobs.jlf') then
    begin
      try
        ...
      finally
        LList.Free;
        ...
      end;
    end;
Was wohl passiert, wenn die Datei "in use" ist.

Delphi-Quellcode:
    if not IsFileInUse(AppDataPath + 'Jobs.jlf') then
    begin
      LList := TStringList.Create;
      try
        ...
PS:
Delphi-Quellcode:
        //for i := 0 to Puffer.Count - 1 do
        // LList.Add(Puffer[i]);
        LList.AddStrings(Puffer);

        //Puffer.Text := EmptyStr;
        Puffer.Clear;
Aber ich würde da eher zu AssignFile+Append+WriteLn raten, oder zumindestens einem FileStream, welcher die Daten direkt anhängt, da muß nicht ständig die ganze Logdatei jedes Mal neu eingelesen werden, sondern man hängt nur die neuen Zeilen an.
Du willst lieber nicht wissen, was seit D2009 beim Laden oder Speichern einer TStringList passiert. (z.B. bis über das 5-Fache des Speicherverbrauchs der Dateigröße)
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (18. Mär 2014 um 23:00 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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 05:01 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz