AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Zugriffsverletzung bei Nutzung Programm vom Server
Thema durchsuchen
Ansicht
Themen-Optionen

Zugriffsverletzung bei Nutzung Programm vom Server

Ein Thema von zeras · begonnen am 10. Jul 2021 · letzter Beitrag vom 11. Jul 2021
Antwort Antwort
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.643 Beiträge
 
Delphi 12 Athens
 
#1

Zugriffsverletzung bei Nutzung Programm vom Server

  Alt 10. Jul 2021, 19:46
Ich habe ein Programm, was von mehreren Kollegen genutzt wird. Deshalb liegt das auf einem Filesever, damit man es im Falle eines Updates nicht immer ausrollen muss. Das klappt ganz gut, nur meldete letztens ein Kollege eine Zugriffsverletzung, siehe Bild.
Ich hatte dies selten auch, nur war dann immer kurz die Netzwerkverbindung weg. Damit hatte ich mir das erklärt.
Kann es auch anderen Ursachen haben?
Miniaturansicht angehängter Grafiken
zugriffsverletzung.png  
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Zugriffsverletzung bei Nutzung Programm vom Server

  Alt 10. Jul 2021, 19:47
Hallo
Bau dir eine MadExcept-Version.
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von blawen
blawen

Registriert seit: 1. Dez 2003
Ort: Luterbach (CH)
679 Beiträge
 
Delphi 12 Athens
 
#3

AW: Zugriffsverletzung bei Nutzung Programm vom Server

  Alt 10. Jul 2021, 22:00
Ich hatte dies selten auch, nur war dann immer kurz die Netzwerkverbindung weg. Damit hatte ich mir das erklärt.
Kann es auch anderen Ursachen haben?
Wenn es an der Netzwerkverbindung liegt, füge folgenden Code in die Projektdatei ein:

{$SetPEFlags IMAGE_FILE_NET_RUN_FROM_SWAP + IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP}

Alternativ kannst Du ja auch ein Loaderprogramm einsetzen, welches die Programmversion lokal kopiert (sofern notwendig) und dann von da aus startet.
Roland
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.643 Beiträge
 
Delphi 12 Athens
 
#4

AW: Zugriffsverletzung bei Nutzung Programm vom Server

  Alt 11. Jul 2021, 09:02
Hallo
Bau dir eine MadExcept-Version.
Danke für die Info.
Mein Programm ist zwar kostenlos, wird aber in einer Firma mit Umsatz genutzt.
Daher weiß ich nicht, wie das
Zitat:
free for non-commercial usage, inexpensive for commercial usage
gewertet werden soll.
Ich werde mich erst einmal auf die andere Antwort konzentrieren.


{$SetPEFlags IMAGE_FILE_NET_RUN_FROM_SWAP + IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP}
Das werde ich probieren.


Alternativ kannst Du ja auch ein Loaderprogramm einsetzen, welches die Programmversion lokal kopiert (sofern notwendig) und dann von da aus startet.
Wo muss denn das Loaderprogramm laufen?
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.508 Beiträge
 
Delphi 7 Professional
 
#5

AW: Zugriffsverletzung bei Nutzung Programm vom Server

  Alt 11. Jul 2021, 10:14
Statt MAD-Except kannst Du auch die entsprechende Fehlerbehandlung aus der JCL nutzen.

Sie steckt in den Units JclDebug, JclHookExcept, ...

Beispiele findest Du unter .\jcv\windows\examples\debug\.

Alternativ mit der Suchmaschine Deiner Wahl nach delphi jcl debug site:delphipraxis.net suchen.
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.643 Beiträge
 
Delphi 12 Athens
 
#6

AW: Zugriffsverletzung bei Nutzung Programm vom Server

  Alt 11. Jul 2021, 12:49

{$SetPEFlags IMAGE_FILE_NET_RUN_FROM_SWAP + IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP}
Das werde ich probieren.
Ich habe meine Unterlagen noch einmal durchgeschaut und gesehen, dass ich diese Flags schon einmal drin hatte.
Da das Projekt schon mit Delphi (Urzeiten) erstellt wurde, hatte ich vor einiger Zeit das Projekt neu angelegt. Daher waren die Flags weg.
Diese sind nun wieder drin und ich werde sehen, ob es immer noch Probleme gibt.
Vielleicht ist auch die Zipmaster DLL schuld, da diese auch auf dem Server liegt und von dort geladen wird.
Wenn das nicht klappt, werde ich die anderen Informationen umsetzen.

Danke für eure Tipps.
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Zugriffsverletzung bei Nutzung Programm vom Server

  Alt 11. Jul 2021, 13:43
Du solltest dir generell eine saubere Exceptionbehandlung angewöhnen. Es ist nie gut, wenn ein Programm statt einer sauberen Fehlermeldung mit Log und Stacktrace usw. nur die Standard-Messagebox anzeigt, die weder dir noch dem Benutzer etwas sagt...

Den Stacktrace bekommst du über die genannte JclDebug z.B. gut, wenn du eine eigene Exceptionbehandlung bauen möchtest.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.643 Beiträge
 
Delphi 12 Athens
 
#8

AW: Zugriffsverletzung bei Nutzung Programm vom Server

  Alt 11. Jul 2021, 14:08
Du solltest dir generell eine saubere Exceptionbehandlung angewöhnen. Es ist nie gut, wenn ein Programm statt einer sauberen Fehlermeldung mit Log und Stacktrace usw. nur die Standard-Messagebox anzeigt, die weder dir noch dem Benutzer etwas sagt...

Den Stacktrace bekommst du über die genannte JclDebug z.B. gut, wenn du eine eigene Exceptionbehandlung bauen möchtest.
Ich dachte, dass wenn das Netz kurzzeitig zusammenbricht, dass man da garnichts machen kann.
Wenn man aber trotzdem etwas machen kann, muss ich sehen, dass die o.g. Infos einbaue.

Wenn ich micht recht erinnere, haben das zur gleichen Zeit mehrere Kollegen an einem Standort berichtet. Am anderen Standort gab es keine Reklamation. Deshalb meine Idee mit dem Netzwerkausfall, da das ab und zu einmal vorkommt.
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.508 Beiträge
 
Delphi 7 Professional
 
#9

AW: Zugriffsverletzung bei Nutzung Programm vom Server

  Alt 11. Jul 2021, 15:14
Der Grund des Problemes ist doch eigentlich egal, 'ne nichtssagende Meldung über eine Zugriffsverletzung sollte der Anwender nicht zu Gesicht bekommen.

Statt dessen könnte man ja versuchen den Fehler abzufangen und z. B. eine Meldung ala "Fehler bei der Programminitialisierung, bitte das Programm neu starten." oder sowas ausgeben. Eine Fehlermeldung mit Hilfe von JCLDebug kann einem dann sogar sagen, wo der Fehler aufgetreten ist. Das könnte dann z. B. so in der Art aussehen (MessageDLG):
Code:
---------------------------
Fehler
---------------------------
Zugriffsverletzung bei Adresse 00455BF2 in Modul 'LogFileViewer.exe'. Lesen von Adresse 00000198

Fehlertyp: EAccessViolation
Sender: fmMainLogFileViewer [TfmMainLogFileViewer]

11.07.2021 14:45:20

Dateiname: LogFileViewer.exe
Fehleradresse: 00054BF2

Unit: Controls
Fehleradresse: 00455BF2
Modulname: Controls

Prozedur: TWinControl.GetControlCount
Prozeduroffset: 2
Zeilennummer: 0
Zeilenoffset: 0
---------------------------
OK  
---------------------------
(Logfile)
Code:
LogFileViewer | 2021.07.10 15.40.20,976 | Dateiname            : LogFileViewer.exe
LogFileViewer | 2021.07.10 15.40.20,976 | Fehlermeldung        : Zugriffsverletzung bei Adresse 00455BF2 in Modul 'LogFileViewer.exe'. Lesen von Adresse 00000198
LogFileViewer | 2021.07.10 15.40.20,976 | Fehlerklasse         : EAccessViolation
LogFileViewer | 2021.07.10 15.40.20,976 | Fehlerauslöser       : pc
LogFileViewer | 2021.07.10 15.40.20,976 | Klassenname          : TPageControl
LogFileViewer | 2021.07.10 15.40.20,976 | Unit                 : Controls
LogFileViewer | 2021.07.10 15.40.20,976 | Fehleradresse        : 00455BF2 (00054BF2)
LogFileViewer | 2021.07.10 15.40.20,976 | Modulname            : Controls
LogFileViewer | 2021.07.10 15.40.20,976 | Prozedur             : TWinControl.GetControlCount
LogFileViewer | 2021.07.10 15.40.20,976 | Prozeduroffset       : 2
LogFileViewer | 2021.07.10 15.40.20,976 | Modul                : 4194304 [400000]
oder aus 'nem anderen Programm:
Code:
FireFoxVerwaltung | 2018.04.09 11.51.47,265 | Dateiname            : FireFoxVerwaltung.exe
FireFoxVerwaltung | 2018.04.09 11.51.47,265 | Fehlermeldung        : Connection is not opened yet
FireFoxVerwaltung | 2018.04.09 11.51.47,265 | Fehlerklasse         : EZDatabaseError
FireFoxVerwaltung | 2018.04.09 11.51.47,265 | Fehlerauslöser       : tmStart
FireFoxVerwaltung | 2018.04.09 11.51.47,265 | Klassenname          : TSpecialTimer
FireFoxVerwaltung | 2018.04.09 11.51.47,265 | Unit                 : ZAbstractConnection
FireFoxVerwaltung | 2018.04.09 11.51.47,265 | Fehleradresse        : 005FCE4F (001FBE4F)
FireFoxVerwaltung | 2018.04.09 11.51.47,265 | Modulname            : ZAbstractConnection.pas
FireFoxVerwaltung | 2018.04.09 11.51.47,265 | Prozedur             : TZAbstractConnection.CheckConnected
FireFoxVerwaltung | 2018.04.09 11.51.47,265 | Prozeduroffset       : 31
FireFoxVerwaltung | 2018.04.09 11.51.47,265 | Zeilennummer         : 942
FireFoxVerwaltung | 2018.04.09 11.51.47,265 | Modul                : 4194304 [400000]
Mit der Angabe von Unit ZAbstractConnection und Zeilennummer 942 weiß man dann schon sehr genau, wo es hakt. Und die Fehlermeldung Connection is not opened yet sagt einem dann auch schon recht genau, was da wohl falschgelaufen ist. Beim Fehlerauslöser handelt es sich hier um die Prozedur tmStart. Damit hat man dann auch die passende Stelle, an der man zum Debuggen mal mit dem Setzen eines BreakPoints anfangen kann.

Das hilft dann bestimmt auch dabei herauszufinden, ob es sich wirklich um das vermutete Netzwerkproblem handelt oder eventuell doch was Anderes dazwischenschießt.

Man kann dann im Dialog direkt einen Abbrechenbutton statt eines OK-Buttons einbauen, der beim Wegklicken das Programm auf jeden Fall beendet.

Per ShellExecute könnte man dann sogar das Programm sich selbst starten lassen.

Achso:
Die Fehlerausgabe aus der JCLDebug sieht nicht so aus, sie stellt lediglich die entsprechenden Informationen zur Verfügung, das Aussehen der Fehlermeldung bzw. der Logausgabe muss man dann schon selbst machen. Oder halt den Exceptiondialog aus der JCL nutzen: https://www.delphipraxis.net/1326309-post19.html oder selbermachen https://www.delphipraxis.net/1326340-post26.html
  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 18:09 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