Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Lazarus (IDE) (https://www.delphipraxis.net/81-lazarus-ide/)
-   -   Programm stürzt bei OpenDialog ab (https://www.delphipraxis.net/173685-programm-stuerzt-bei-opendialog-ab.html)

Thor500 11. Mär 2013 09:27

Programm stürzt bei OpenDialog ab
 
Hallo Leute,

ich habe ein kleines Problem mit dem OpenDialog bei Lazarus. Und zwar habe ich, testweise, nur ein Formular genommen, dort einen OpenDialog1 platziert und einen Button1, auch nicht umbenannt. Dann habe ich beim Ereignis Button1.Click folgenden Code eingefügt:

OpenDialog1.Execute;

Führe ich dies in der IDE aus, kann funktioniert alles Super, auch die Zugriff auf die Windows 7 Bibliotheken unter den Favoriten (auch außerhalb der IDE). Wenn ich die erzeugte exe nun auf einem anderen Windows 7 ausführe, außerhalb der IDE, weil ich die dort nicht installieren kann, dann stürzt das Programm beim Zugriff auf die Win7 Bibliotheken ab. Ohne Fehlermeldung.

Beide Rechner haben Windows 7 Enterprise 64 Bit. Habt Ihr da noch eine Idee, warum das so passiert und wie ich das Lösen kann? Ich habe bei dem Programm, welches ich entwickle erst mal so gelöst das Initial-Dir auf C:\ zu stellen, damit das Programm nicht abstürzt, sollte OpenDialog in einer Bibliothek initialisiert werden, denn dann würde das Programm abstürzen.

Grüße
Florian

Morphie 11. Mär 2013 10:41

AW: Programm stürzt bei OpenDialog ab
 
Ich vermute mal, dass irgendein Preview Handler Probleme macht. Ich konnte dieses Problem mal lösen, in dem ich das Benutzerprofil einfach neu angelegt habe...

Thor500 11. Mär 2013 10:57

AW: Programm stürzt bei OpenDialog ab
 
Hallo,

danke für die Info. Allerdings wurde dies, wenngleich aus einem anderen Grund, bereits getan. Das Profil ist niegel nagel neu. Aber danke für die Idee.

Hast du ggf. noch weitere Ideen? Eine Möglichkeit die Bibliotheken auszublenden gibt es ja nicht, oder?

Grüße
Florian

gee21 11. Mär 2013 10:59

AW: Programm stürzt bei OpenDialog ab
 
HI

Bin zwar selber noch ein Anfänger aber vielleicht könnte es ja an so etwas liegen:

- Zu wenig Benutzerrechte der Delphi Anwendung? (Daher funktioniert es evt nur in der IDE)
- Könnte es sein, wenn der Windows Bibliotheken andere Pfade zugewiesen wurde als standartmässig voreingestellt waren (zB anstatt c:/user/pictures zu: F:/Bilder)?
- Hilft es / macht es einen Unterschied, wenn du den Opendialog aufruf in einem Try / Except schreibst?
- Ich rufe den Opendialog immer so auf:
Delphi-Quellcode:
If opendialog1.execute=true then begin
edit1.text:=opendialog1.filename);
end;
Keine Ahnung ob etwas helfen könnte. Aber wer weis... :-D

Morphie 11. Mär 2013 11:03

AW: Programm stürzt bei OpenDialog ab
 
Ich gehe immer so vor, dass ich mir den ProcessMonitor downloade / starte. Das Programm spuckt dir alle möglichen I/O Zugriffe durch das Betriebssystem aus.
Dort setze ich einen entsprechenden Filter für mein Programm.
Dann führe ich in dem Programm die Problemstelle durch und schaue, was genau Windows an dieser Stelle alles so macht... Dort werden zwar immer noch sehr viele Einträge stehen (z.B. die von Windows' drwatson usw.) aber irgendwann müsste auch das Problemkind auftauchen.

Einen Versuch ist's wert.

Morphie 11. Mär 2013 11:07

AW: Programm stürzt bei OpenDialog ab
 
OT:

Zitat:

Zitat von gee21 (Beitrag 1206840)
- Ich rufe den Opendialog immer so auf:
Delphi-Quellcode:
If opendialog1.execute=true then begin
edit1.text:=opendialog1.filename);
end;

Viel besser wäre allerdings

Delphi-Quellcode:
If (opendialog1.execute) then begin
  edit1.text := opendialog1.filename);
end;
execute gibt bereits einen Boolean-Typ zurück. Nochmals auf true zu überprüfen, wäre "doppelt gemoppelt" und auch aus anderen Gründen nicht zu empfelen...
wenn man die ganze Sache dann weiterspinnt, könnte man auch schreiben
Delphi-Quellcode:
If ((((opendialog1.execute=true)=true)=true)=true) then begin
edit1.text:=opendialog1.filename);
end;
Macht wenig Sinn, oder? ;-)

gee21 11. Mär 2013 11:10

AW: Programm stürzt bei OpenDialog ab
 
:-D Aha Danke. Muss ich gleich bei mir ändern :-D

Zitat:

Zitat von Morphie (Beitrag 1206846)
OT:

Zitat:

Zitat von gee21 (Beitrag 1206840)
- Ich rufe den Opendialog immer so auf:
Delphi-Quellcode:
If opendialog1.execute=true then begin
edit1.text:=opendialog1.filename);
end;

Viel besser wäre allerdings

Delphi-Quellcode:
If (opendialog1.execute) then begin
  edit1.text := opendialog1.filename);
end;
execute gibt bereits einen Boolean-Typ zurück. Nochmals auf true zu überprüfen, wäre "doppelt gemoppelt" und auch aus anderen Gründen nicht zu empfelen...
wenn man die ganze Sache dann weiterspinnt, könnte man auch schreiben
Delphi-Quellcode:
If ((((opendialog1.execute=true)=true)=true)=true) then begin
edit1.text:=opendialog1.filename);
end;
Macht wenig Sinn, oder? ;-)


Thor500 11. Mär 2013 11:10

AW: Programm stürzt bei OpenDialog ab
 
- Zu wenig Benutzerrechte der Delphi Anwendung? (Daher funktioniert es evt nur in der IDE)
Beide Rechner haben nur Benutzerrechte, keine Administratorrechte.

- Könnte es sein, wenn der Windows Bibliotheken andere Pfade zugewiesen wurde als standartmässig voreingestellt waren (zB anstatt c:/user/pictures zu: F:/Bilder)?
Die Pfade sind bei beiden Rechner die Standardmäßigen von Windows

- Hilft es / macht es einen Unterschied, wenn du den Opendialog aufruf in einem Try / Except schreibst?
Ein Try/Except habe ich noch nicht probiert, werde es mal machen

- Ich rufe den Opendialog immer so auf:
Delphi-Quellcode:
If opendialog1.execute=true then begin
edit1.text:=opendialog1.filename);
end;
IMHO habe ich keine Aktion in meinem Testprogramm, welche sich auf den FileName bezieht. Außerdem tritt die Exception schon auf, bevor von opendialog1 irgendwas zurückgegeben wird.



Delphi-Quellcode:
If (opendialog1.execute) then begin
  edit1.text := opendialog1.filename);
end;
Zumal da auch eine Klammer zu vel ist, doer? :)

@Morphie:
Werde das mal auspropieren, mal sehen inwieweit meine Userrechte da ausreichen ;)

Thor500 11. Mär 2013 11:16

AW: Programm stürzt bei OpenDialog ab
 
Jap, wie ich es mir schon gedacht habe, kann ich ohne Adminrechte mit dem ProcessMonitor nichts anfangen, da gibt es sicherlich auch keine Möglichkeit das ohne Adminrechte zu machen?!

Morphie 11. Mär 2013 11:18

AW: Programm stürzt bei OpenDialog ab
 
Nein, der ProcessMonitor braucht Administrator Rechte.
Gibt es dort keinen Admin, der dich dabei unterstützen könnte?

p80286 11. Mär 2013 11:33

AW: Programm stürzt bei OpenDialog ab
 
Auch wenn es etwas spät ist
was bedeutet "stürzt ab"? Könnte es vllt. auch sein, das da eine tote Netzwerkverbindung ins Spiel kommt?

Außerdem kann man das InitialDir vorbelegen. Das Userverzeichnis sollte da im allgemeinen keine Probleme bereiten. C:\ ist da u.U. nicht so diee Wahl.

Gruß
K-H

Thor500 11. Mär 2013 11:42

AW: Programm stürzt bei OpenDialog ab
 
Zitat:

Zitat von p80286 (Beitrag 1206866)
Auch wenn es etwas spät ist
was bedeutet "stürzt ab"? Könnte es vllt. auch sein, das da eine tote Netzwerkverbindung ins Spiel kommt?

Außerdem kann man das InitialDir vorbelegen. Das Userverzeichnis sollte da im allgemeinen keine Probleme bereiten. C:\ ist da u.U. nicht so diee Wahl.

Gruß
K-H

Das Programm wird beendet und dann kommt von WIndows nur die Meldung, dass das Programm nicht mehr richtig funktioniert.

InitialDir hab ich nur zur Lösung gesetzt ;) Damit funktioniert es auch ohne Probleme, wenn man nicht in die Bibliotheken wechselt. Das habe ich nur auf C:\ gesetzt, damit das Programm nicht abstürzt weil man zufällig in einen Bibliotheksordner initialisiert.

P.S.:
Adminrecht werde ich mir im Laufe des Tages mal besorgen ;) Ist ja nicht so als gäbe es da keinen :)

p80286 11. Mär 2013 11:48

AW: Programm stürzt bei OpenDialog ab
 
Zitat:

Zitat von Thor500 (Beitrag 1206870)
P.S.:
Adminrecht werde ich mir im Laufe des Tages mal besorgen ;) Ist ja nicht so als gäbe es da keinen :)

dann sei froh, daß ich nicht dein Admin bin :zwinker:

Hast Du auch an das Manifest gedacht?
Die beschriebene Fehlermeldung taucht manchmal bei Manifest-Problemen auf.

Gruß
K-H

Thor500 11. Mär 2013 12:01

AW: Programm stürzt bei OpenDialog ab
 
dann sei froh, daß ich nicht dein Admin bin :zwinker:
Warum?

Hast Du auch an das Manifest gedacht?
Ähm, in welchem Zusammenhang? Die Anwendung benätigt keine Adminrechte, also sollte doch die Standard-Manifest in Ordnung sein?!

p80286 11. Mär 2013 12:06

AW: Programm stürzt bei OpenDialog ab
 
Wenn einer kommt und ausserhalb der Installation Adminrechte benötigt, wird er hochkannt an die frische Luft befördert. Zumindstens im "normalen" Büroumfeld kann man als normaler Nutzer ganz gut leben. Ggf. müssen ein paar (Datei-)Zugriffsrechte angepasst werden, das war's dann aber auch.

Gruß
K-H

Thor500 11. Mär 2013 12:10

AW: Programm stürzt bei OpenDialog ab
 
Das stimmt, da gebe ich dir auch vollkommen Recht.

Allerdings kannst du zeitlich begrenzte Adminrechte bekommen, wenn es für deine Arbeit benötigt wird ;)

Morphie 11. Mär 2013 12:12

AW: Programm stürzt bei OpenDialog ab
 
Dann ist aber auch der Admin dafür verantwortlich, dass alle Preview Handler ordnungsgemäß funktionieren. (falls es denn an diesen liegt)
OpenDialog ruft ja lediglich die entsprechende API auf. Ich denke nicht, dass der Fehler in dem eigenen Programm zu suchen ist.

Thor500 11. Mär 2013 12:20

AW: Programm stürzt bei OpenDialog ab
 
Zitat:

Zitat von Morphie (Beitrag 1206890)
Dann ist aber auch der Admin dafür verantwortlich, dass alle Preview Handler ordnungsgemäß funktionieren. (falls es denn an diesen liegt)
OpenDialog ruft ja lediglich die entsprechende API auf. Ich denke nicht, dass der Fehler in dem eigenen Programm zu suchen ist.

Naja, bei anderen Programmen, unter anderem auch von einem anderen Entwickler der hier bei mir mit sitzt, funktioniert es problemlos, wurde allerdings in C# geschrieben. Insofern denke ich schon, das es irgendwas mit Lazarus zu tun hat.

Morphie 11. Mär 2013 12:22

AW: Programm stürzt bei OpenDialog ab
 
Dein Lazarus Programm ist 32 Bit, oder?
C# = Any CPU = 64 Bit

Das ist quasi ein anderes System.

Thor500 11. Mär 2013 12:41

AW: Programm stürzt bei OpenDialog ab
 
Zitat:

Zitat von Morphie (Beitrag 1206896)
Dein Lazarus Programm ist 32 Bit, oder?
C# = Any CPU = 64 Bit

Das ist quasi ein anderes System.

Verion ist: x86_64-win64, ich bin mir nicht sciher, welche Version das ist :S

Morphie 11. Mär 2013 12:43

AW: Programm stürzt bei OpenDialog ab
 
Ok, das scheint in der Tat auch 64Bit zu sein... Dann habe ich nix gesagt ;-) Dann hilft wirklich nur herauszufinden, wobei der Fehler entsteht (ProcessMonitor, Debugger usw.)

Morphie 11. Mär 2013 12:50

AW: Programm stürzt bei OpenDialog ab
 
Was du eventuell noch ausprobieren könntest:
InitDir auf z.B. C:\ stellen (da gibt es doch keinen Fehler, richtig?)
Dann per "Rechtsklick > Ansicht > Details" die Ansicht ändern, bzw. die Vorschau deaktivieren
Dann in die Bibliothek gehen... Wenn der Fehler jetzt nicht mehr auftritt liegt es wohl wirklich an einer Shellextension / Preview Handler

edit: bzw. die Darestellung schon vorher im Explorer / in einem anderen Programm ändern.

Thor500 11. Mär 2013 12:55

AW: Programm stürzt bei OpenDialog ab
 
Zitat:

Zitat von Morphie (Beitrag 1206901)
Was du eventuell noch ausprobieren könntest:
InitDir auf z.B. C:\ stellen (da gibt es doch keinen Fehler, richtig?)
Dann per "Rechtsklick > Ansicht > Details" die Ansicht ändern, bzw. die Vorschau deaktivieren
Dann in die Bibliothek gehen... Wenn der Fehler jetzt nicht mehr auftritt liegt es wohl wirklich an einer Shellextension / Preview Handler

edit: bzw. die Darestellung schon vorher im Explorer / in einem anderen Programm ändern.

Die Ansicht ist standradmäßig auf Details, ich habe mal auf Kcheln umgestellt und dann in die Bibliothel gewechselt. Da wird mir der Inhalt für ca. 2 Sekunden angzeigt (kein Freeze) und dann stürzt das Programm wieder ab. Versuche ich es erneut, ohne die Ansicht zu ändern, stürzt es sofort wieder ab. Die Vorschau ist auch deaktiviert.

Morphie 11. Mär 2013 12:57

AW: Programm stürzt bei OpenDialog ab
 
Kannst du das Problem denn in einer kleinen Test-Anwendung nachbilden?

Thor500 11. Mär 2013 12:59

AW: Programm stürzt bei OpenDialog ab
 
Zitat:

Zitat von Morphie (Beitrag 1206903)
Kannst du das Problem denn in einer kleinen Test-Anwendung nachbilden?

Jap, habe ich schon geschrieben ;) Wird auch langsamer größer der Thread, hatt eich nicht gedacht. Auch wenn die Anwendung nur ein Formular mit einem OpenDialog und eine Button ist (auch die Namen habe ich testweise einfach mal nicht geändert), tritt das Problem auf.

P.S.: An Debugger bzw. ProcessMonitor bin ich noch dran...

Morphie 11. Mär 2013 13:00

AW: Programm stürzt bei OpenDialog ab
 
Dann häng das Programm doch mal an, dann können wir das hier versuchen nachzuvollziehen.

Thor500 11. Mär 2013 13:07

AW: Programm stürzt bei OpenDialog ab
 
Hallo,

das ist jetzt nicht mehr nötig. Es lag doch an Lazarus, allerdings weiß ich nicht warum :)

Und zwar habe ich auf dem betreffenden PC, auf dem das Programm abstürzt Lazarus Portable genommen, was ich noch auf dem einem USB-Stick hatte und damit den Quellcode compiliert. Und siehe da: Es funktioniert, kein Absturz. Entweder ist die Lazarus Installation auf dem anderen Rechner nicht ganz sauber, oder ich weiß nicht...

Zum Hochladen des Programms:
Ich hoffe du verstehst es, wenn die Unternehmensrichtlinien dies nicht erlauben ;)

Danke für eure Hilfe!

P.S.: War jetzt doch einfacher als ich gedacht hatte :S

Grüße
Florian

Morphie 11. Mär 2013 13:10

AW: Programm stürzt bei OpenDialog ab
 
Na denn ist ja alles bestens. :-)

Thor500 11. Mär 2013 13:16

AW: Programm stürzt bei OpenDialog ab
 
Zitat:

Zitat von Morphie (Beitrag 1206914)
Na denn ist ja alles bestens. :-)

Exakt :) Auch noch mal der Vollständigkeit halber: Ich habe das Programm auch mal auf den anderen Rechner kopiert, also den auf dem ich am Anfang compiliert habe und da funktioniert das ganze auch ohne Probleme.

SUPER!

Grüße
Florian

JamesTKirk 12. Mär 2013 05:33

AW: Programm stürzt bei OpenDialog ab
 
Nur für's Protokoll: welche Lazarus Version hat dein ursprüngliche Installation und welche die portable? Waren beides 64-Bit Varianten oder war die Portable nur 32-Bit?

Gruß,
Sven

PS: für die Versionsangabe am Besten in den Über Dialog gehen und den Inhalt mit Steg+C kopieren (soll angeblich funktionieren).


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:26 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