AGB  ·  Datenschutz  ·  Impressum  







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

externe Exception c0000006

Ein Thema von UntoterGeist · begonnen am 18. Sep 2019 · letzter Beitrag vom 30. Sep 2019
Antwort Antwort
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.684 Beiträge
 
Delphi 5 Professional
 
#1

AW: externe Exception c0000006

  Alt 18. Sep 2019, 21:48
Das klingt mir danach, dass die PE Flags IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP und IMAGE_FILE_NET_RUN_FROM_SWAP helfen könnten. Siehe PE (Portable Executable) Header-Flags (Delphi).

Beispiel:
Delphi-Quellcode:
{$SetPEFlags IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP}
{$SetPEFlags IMAGE_FILE_NET_RUN_FROM_SWAP}
[EDIT]
Siehe auch hier bei StackOverflow: https://stackoverflow.com/questions/...-terminal-serv
[/EDIT]

Grüße
Dalai

Geändert von Dalai (18. Sep 2019 um 21:53 Uhr)
  Mit Zitat antworten Zitat
UntoterGeist

Registriert seit: 18. Sep 2019
25 Beiträge
 
#2

AW: externe Exception c0000006

  Alt 18. Sep 2019, 22:07
Danke für die schnelle Antwort.

Aber das ist genau das, was ich in der Experimental gemacht habe. Und wie ich geschrieben hab, hat das "scheinbar" funktioniert, aber ich darf die Lösung so nicht umsetzten. Ich soll den Fehler im Code finden. Und ich befürchte einfach, dass ich das nicht kann. Weil es eben daran liegt das Programmteile aus dem Netzwerk nachgeladen werden sollen und der Zugriff durch irgendwas gestört ist. Mein Chef ist aber der Überzeugung, dass alles, also das gesamte Programm, in den RAM geladen wird und es deshalb keine Fehler geben könnte. Es muss also an mir und meinem Code liegen, so er.

Ich sehe gerade wie das Vertrauen in meine Fähigkeiten zerbröselt. Denn wir haben noch ein anderes Projekt an dem ich arbeiten soll und eigentlich muss.
  Mit Zitat antworten Zitat
samso

Registriert seit: 29. Mär 2009
439 Beiträge
 
#3

AW: externe Exception c0000006

  Alt 18. Sep 2019, 22:34
Werden die Datenbankverbindungen über die gesamte Laufzeit des Programms offen gehalten, oder wird bei jeder Benutzung der Datenbank die Verbindung neu initialisiert? Hast Du im Blick, dass der MySql-Server eine Verbindung die 8 (defaultwert) Stunden nicht genutzt wurde, einfach trennt?
  Mit Zitat antworten Zitat
UntoterGeist

Registriert seit: 18. Sep 2019
25 Beiträge
 
#4

AW: externe Exception c0000006

  Alt 18. Sep 2019, 22:56
Die Verbindung zur Datenbank wird standardmäßig schon nach ca. 10 Minuten vom Server getrennt. Gab früher schon mal Probleme damit. Es wird in einem Timer im Hauptmenu geprüft, ob die Verbindung noch steht, wobei man sich das schenken könnte, weil vor jeden Query die Verbindung mit ping geprüft und neu aufgebaut wird wenn es sein muss. Im Fehlerfall wird man auch ins Hauptmenu zurück geschickt. Sprich es wird ein Error zurück gegeben und nichts weiter ausgeführt. Ist inzwischen alles soweit verschachtelt. Im Prinzip muss die Verbindung nicht offen gehalten werden. Die Lib wird natürlich nicht neu eingebunden. Aber bei Free crasht es dann. Auch wenn vor Stunden und auch sonst noch alles lief.

Das assigned prüft ja auch nur auf Nil. Aber nicht, ob der Pointer noch gültig ist. Und da scheint das Problem zu sein. Die Objekte scheinen auf wundersame Weise ungültig zu werden und der Zeiger zeigt halt nur auf die Stelle die jetzt fremd belegt wird. Ich setzte auch die Pointer manuell auch Nil nach dem Free. Es sind auch nur 3 Funktionen was die Datenbank betrifft wo das passiert also recht überschaubar.
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.684 Beiträge
 
Delphi 5 Professional
 
#5

AW: externe Exception c0000006

  Alt 18. Sep 2019, 23:27
Tja, nun, ein Programm wird aber nicht komplett in den Speicher geladen, weder unter Windows noch unter Linux, noch nicht einmal, wenn man die genannten PE-Flags setzt; die Flags sorgen nur dafür, dass das Programm aus dem Swap läuft statt vom Netzwerk/Wechseldatenträger, d.h. fehlende Pages kommen von der lokalen Platte statt vom ursprünglichen Ort. Dasselbe trifft auch auf DLLs zu. Will sagen: Wenn du die Flags setzt, dann muss das in allen beteiligten Teilen passieren. Wenn du Fremd-DLLs eingebunden hast, wird das schwierig bis unmöglich; dann könnte nur ein dynamisches Laden und Entladen der DLLs helfen.

Netzwerkverbindungen werden nun einmal getrennt, wenn man den Rechner schlafen legt. Und bei einem vom Netz laufenden Programm die Netzwerkverbindung zu trennen, führt dann sehr gern zu völlig unvorhergesehenem Verhalten und/oder Abstürzen (wie ich erst gestern selbst erleben durfte als ich ein Netzwerkkabel rausgezogen hatte...).

Grüße
Dalai
  Mit Zitat antworten Zitat
UntoterGeist

Registriert seit: 18. Sep 2019
25 Beiträge
 
#6

AW: externe Exception c0000006

  Alt 18. Sep 2019, 23:44
Tja, nun, ein Programm wird aber nicht komplett in den Speicher geladen
Das erzähl mal meinem Chef. Für ihn ist das nicht mehr als ein Hello World Programm. Und das muss ja vollständig in den RAM geladen werden. Das hat er gestern (inzwischen) noch mal deutlich gesagt Mein Kollege geht da völlig d'accord. Und der hat das studiert! Woher die Gewissheit kommt weiß ich nicht. Entschuldigt meine Abfälligkeit. Aber ich bin etwas niedergeschlagen. Das Schlimmste ist das, Dalai, dein Vorschlag funktioniert, aber dieser abgelehnt wird. Aus genannten Gründen. Inzwischen wird mir auch so auf die Tastatur geschaut, dass ich mich nicht mehr wohl fühle. Alles scheint potentiell Falsch zu sein und ich muss alles doppelt und dreimal prüfen.

Das es tausende Beiträge zu dem Thema gibt ist auch nur die Bestätigung das es so nicht sein kann. Ich glaub das ist eig. mehr ein soziales Problem. Weil ich würde die Flags einfach setzten und das eine Woche testen. Für meinen Chef ist so eine Methodik aber unprofessionell.
  Mit Zitat antworten Zitat
mensch72

Registriert seit: 6. Feb 2008
838 Beiträge
 
#7

AW: externe Exception c0000006

  Alt 19. Sep 2019, 05:02
Einfache & pragmatische Lösung:
- mache eben wie "gewollt" das Programm ohne besondere PE Flags
- binde die EXE als Resource in ein zusätzliches kleines "FullfileLoaderProgramm" ein
- kopiere also im Loaderprogramm einfach nur 1x die Resource in z.B. das lokale "ProgrammData" Verzeichnis, starte die EXE dort "lokal" via ShellExecute und beende das Loaderprogramm

So startet dein Chef bei ja aktivem Netzwerk problemlos das "LoaderProgramm", es lädt wegen Zugriff auf die riesige Resource definitiv 1x komplett vom Netzwerk auf den PC(wie er ja unbedingt will) und ab da läuft es dann wie er ja auch will lokal...

=> Chefe hat seinen Willen und Programm funktioniert
  Mit Zitat antworten Zitat
sahimba

Registriert seit: 14. Nov 2011
Ort: Berlin, Hauptstadt der DDR
137 Beiträge
 
Delphi 10 Seattle Professional
 
#8

AW: externe Exception c0000006

  Alt 19. Sep 2019, 08:29
Für meinen Chef ist so eine Methodik aber unprofessionell.
Dein Chef hat keine Ahnung, verweigert sich einer Diskussion und versucht, ebenso wie Dein Kollege, sich mittels angeblicher Autorität durchzusetzen. Das ist in der Tat ein soziales Problem und ich würde nicht davon ausgehen, dasss Du das in absehbarer Zeit lösen wirst. Streck Deine Fühler nach anderen Arbeitsstellen aus.
  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 04:34 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