AGB  ·  Datenschutz  ·  Impressum  







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

Programm stürzt auf anderen PCs ab

Ein Thema von Romensch · begonnen am 10. Nov 2009 · letzter Beitrag vom 24. Nov 2009
Antwort Antwort
Romensch

Registriert seit: 28. Okt 2007
5 Beiträge
 
#1

Programm stürzt auf anderen PCs ab

  Alt 10. Nov 2009, 19:35
Hallo Leute!

Ich hab ein Druckserver-Programm programmiert, welches ein Verzeichnis überwacht und automatisch eine PDF-Datei auf dem Standarddrucker ausdruckt (via Ghostprint.exe von Ghostview), wenn diese in dieses Verzeichnis gespeichert wird.

Das Programm wurde auf einem Windows XP Home SP3 Rechner mit Delphi 6 programmiert und funktioniert auf diesem PC einwandfrei.

Der Zielrechner, für den das Programm vorgesehen ist, hat Windows XP Professional installiert.

Das Programm läuft dort nicht, sondern stürzt sofort nach dem Start ab (xy.exe hat ein Problem festgestellt und muss beendet werden.)

Testweise wurde das Programm noch auf einem Vista Rechner mit SP2 und einem virtuellen Windows 98 System gestartet. Es stürzt auch da in beiden Fällen beim Start ab.

Die Ereignisanzeige unter XP und Vista liefert über den Absturz nur irgendwas mit "Fehlerhaftes Modul Kernel32.dll".

Ich hab keinen Plan, woran das liegen könnte. Das Programm wird auf beiden Rechnern unter Administratorkonten ausgeführt, daran kann es nicht liegen.

Habt ihr eine Idee? Ich bin echt ratlos.

Hier ist der Programmcode (EDIT: Jetzt auch als Attachment hochgeladen.):
http://pastebin.de/1357

Gruß
Romensch
Angehängte Dateien
Dateityp: pas unit1_118.pas (4,6 KB, 4x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Programm stürzt auf anderen PCs ab

  Alt 10. Nov 2009, 20:05
Was ist "direkt nach dem Start"?
versagt schon der (Exe)Loader, weil z.B. irgendwas fehlt
oder dreht irgendwas im Programm durch?

Was ist (in) TDirMonitor?

Globalen Variablen sind böse. (pfad und installdir gehören in den Private-Avschnitt der Form)

Und was mir noch auffiehl:
Wozu glaubst du ist Action und FileName in DirMonitor1Change?
Diese sollte man mal auswerten (denn diese sagen gleich was sich geändert hat ... da muß man dann nicht erst suchen)

PS: kommt es mir nur so vor, oder könnte hier was doppelt bearbeitet werden?
Außerdem könnte es probleme geben, wenn irgendwas noch dabei ist die neue PDF zu speichern, wärend du schon versuchst diese zu drucken.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
fatalerror
(Gast)

n/a Beiträge
 
#3

Re: Programm stürzt auf anderen PCs ab

  Alt 10. Nov 2009, 20:31
Zitat von himitsu:
Globalen Variablen sind böse. (pfad und installdir gehören in den Private-Avschnitt der Form)
Da sind weitere ganz böse Dinge in diesem Code!

- Inidateien gehören nie ins Programmverzeichnis. ApplicationData
- Eine Fehlerüberprüfung gehört in "jede" Procedure (Dann siehst du auch wo es crasht).
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.415 Beiträge
 
Delphi XE5 Professional
 
#4

Re: Programm stürzt auf anderen PCs ab

  Alt 10. Nov 2009, 21:05
Hi Romensch, willkommen in der DP.

Wir bevorzugen hier, dass alles von dem DP Server kommt.
Um deinen Source hier her zu bekommmen, hast du viele Möglichkeiten.
a) du kopierst den Source hier rein und versiehst ihn mit den Code-Tags
b) du hängst ihn als Attachment an.

Wäre toll wenn du deinen ersten Beitrag editierst und um den Code ergänzt.
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Programm stürzt auf anderen PCs ab

  Alt 11. Nov 2009, 10:39
Ist die Ini-Datei nicht vorhanden oder keine Pfade angegeben, sind die entsprechenden Variablen leer.
Dann gibt es hier eine schöne Zugriffsverletzung:
Delphi-Quellcode:
function TForm1.pfruefePfad(tempPfad : string) : string;
begin
  if tempPfad[length(tempPfad)] = '\then
        result:= tempPfad
  else
    result := tempPfad + '\';
end;
  Mit Zitat antworten Zitat
Alt 11. Nov 2009, 14:24     Erstellt von generic
Dieser Beitrag wurde von Phoenix gelöscht. - Grund: Da der Code nun als Attachment angehängt ist macht es keinen Sinn, den nochmal direkt in einem eigenen Beitrag in Code-Tags z
Romensch

Registriert seit: 28. Okt 2007
5 Beiträge
 
#6

Re: Programm stürzt auf anderen PCs ab

  Alt 11. Nov 2009, 15:26
Hallo!

Echt ein tolles Forum hier. So schnell so viele Antworten.

Entschuldigung, dass ich den Code per PasteBin geschickt habe, ich wusste nicht, ob das hier gern gesehen ist, wenn man das Forenlayout mit ellenlangen Codes sprengt. Hab's nochmal als Attachment hochgeladen.

Also, ich bin noch ein Anfänger, deswegen sind eure Tipps sehr nützlich. Werd sie nach und nach durchgehen ...

@himitsu
"Direkt nach dem Start" heißt, dass sofort das Fenster von Windows kommt "xy.exe hat ein Problem festgestellt ..." ohne dass man von dem Programm überhaupt etwas zu sehen bekommt.
Normal startet das Programm ja und minimiert sich direkt im Tray und man sieht dort das Symbol. Das ist jedoch auf den 3 Testrechnern nicht der Fall, es stürzt eben sofort ab.
Ob der EXE-Loader nicht geht oder irgendwas im Programm spinnt, kann ich nicht sagen (weiß nicht einmal wirklich, was so ein EXE-Loader ist).

TDirMonitor ist eine zusätzliche Komponente für Delphi, die ich installiert habe, um das Verzeichnis zu überwachen.
Bei Änderungen im Verzeichnis (genauer: neue Datei) wird die Prozedur "DirMonitor1Change" ausgeführt.

Ok, ich werd die globalen Variablen unter "private" deklarieren, kann jedoch nicht erkennen, wie hier der Zusammenhang zwischen dem Absturz auf bestimmten PCs bestehen soll.

Dass ich die PDF-Dateien extra suche, sollte doch eigentlich kein Problem darstellen. Ich will nur sicher gehen, dass wirklich alle PDF in dem Verzeichnis gedruckt werden, z.B. wenn sich was ansammelt solange der Druckserver noch nicht gestartet ist.
Meint ihr ich sollte dann die ganze Prozedur mit "DirMonitor1Change" über Bord werfen und lieber eine Endlosschleife programmieren, die alle 10s oder so das Druckverzeichnis auf PDF Dateien prüft und diese dann druckt?

Wegen den Problemen mit dem Drucken während es noch andere Dateien gibt: das ist eigentlich kein Problem. Auf dem Rechner, auf dem das Programm geschrieben wurde, hat gsprint.exe anstandslos mehrere Dateien gedruckt. Für jede Datei öffnet sich ein DOS-Fenster, d.h. eine eigene Instanz von gsprint.exe

@fatalerror
Wieso soll ich die INI-Datei nicht ins Programmverzeichnis packen? Ich dachte, es ist übersichtlicher, wenn alles zusammen in einem Ordner ist und nicht getrennt auf der Festplatte herumfährt.

Wie kann ich eine Fehlerbehebung in Prozeduren umsetzen? Ich hab während der Entwicklung immer wieder "ShowMessage('Ich tu grad dies und das');" eingebaut, um zu erkennen, ob das Programm auch gerade die richtige Prozedur startet etc.
Auf dem Entwicklungsrechner läuft das Programm ja soweit auch korrekt.

@Blup
Die INI hab ich mit der Programm.exe mitkopiert. Die Pfadangaben waren zu Beginn auf "C:\", da dieser Ordner eigentlich immer vorhanden ist.

EDIT:
Ich hab jetzt mal die "DirMonitor" Prozedur über Bord geworfen und hab die Überwachung einfach mal "zu Fuß" per Timer (Test auf PDF alle 10s) realisiert.
Jetzt läuft das Programm auf dem virteuellen Windows 98 und auf dem Vista Rechner.
Den XP Professional Rechner konnte ich nicht testen, erst morgen auf der Arbeit wieder.
Was lernt man daraus: Man sollte möglichst keine fremden Komponenten verwenden ...

Eure Tipps hab ich trotzdem soweit mal umgesetzt (Variablen im Private Teil). (Neuer Code im Attachment angefügt.)
Angehängte Dateien
Dateityp: pas unit1_895.pas (5,0 KB, 6x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#7

Re: Programm stürzt auf anderen PCs ab

  Alt 11. Nov 2009, 16:16
Hallo Romensch,

so wie Du den "Absturz" beschreibst, vermute ich den Fehler in der .DPR.
in den meisten Fällen sieht eine .DPR ja so aus:
Delphi-Quellcode:
program COUNTER_TEST;

uses
  Forms,
  counter_test_m in 'counter_test_m.pas{Form1},
  Counter_test_data in 'Counter_test_data.pas';

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.
Das Programm wird initialisiert (Form eingerichtet) und mit .Run läuft dann die Eventsteuerung an, die in den meisten Fällen auf einen Mausklick reagiert.

Wenn Dein Programm "selbstätig" nach Änderungen in einem Verzeichnis sucht, wo passiert das denn?
Timer1 kann es nicht sein, da der für die Minimierung zuständig ist.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Romensch

Registriert seit: 28. Okt 2007
5 Beiträge
 
#8

Re: Programm stürzt auf anderen PCs ab

  Alt 11. Nov 2009, 16:40
Hallo p80286.

Ich hab deinen Beitrag erst nach der Editierung gelesen.

Der Fehler liegt wohl in der Komponente "TDirMonitor" die ich im Internet heruntergeladen und zusätzlich in Delphi installiert habe.

Diese Komponente kann Verzeichnisse überwachen und z.B. eine Prozedur ausführen, wenn eine Datei hinzukommt. Wie genau das funktioniert, weiß ich nicht, hab ich mir auch nicht angeguckt.

Ich hab die Komponente jetzt aus dem Programm verbannt und benutze jetzt wie du schon angesprochen hast, einen Timer (Timer2).

Danke für eure Hilfe.
  Mit Zitat antworten Zitat
Gribbelfix

Registriert seit: 15. Apr 2009
Ort: ~Osnabrück
3 Beiträge
 
Delphi 2007 Professional
 
#9

Re: Programm stürzt auf anderen PCs ab

  Alt 24. Nov 2009, 12:58
Die TDirMonitor-Komponente funktioniert sehr wohl - das Problem dürfte eher sein, dass hier eine Exception geworfen wird.

Das im Beispiel hinterlegte Verzeichnis 'C:\prueba' wird wohl auch auf Deinem Rechner nicht vorhanden sein...
Wenn Du ein vorhandenes Verzeichnis bei der Komponente hinterlegst funktionierts prima.
Oder Du fängst die Exception ab (-> "No se ha encontrado el directorio" - Verzeichnis nicht gefunden).

Dieses "Monitoring" des Verzeichnisses gefällt mir wesentlich besser als ein dauerndes pollen...
Andreas
  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 10:27 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