Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Eigenartiges Verhalten bei Nutzung von openDialog
daywalker0086 - Do 26.06.14 15:40
Titel: Eigenartiges Verhalten bei Nutzung von openDialog
Hallo Leute,
ich habe ein eigenartiges Verhalten bei der Ntuzung von einem OpenDialog.
Folgendes soll passieren:
Über den Opendialog wähle ich eine Datei aus und der Pfad wird in einem Editfeld geschrieben:
Delphi-Quelltext
1: 2: 3: 4:
| if open_oldfile_dlg.Execute then begin showmessage(open_oldfile_dlg.FileName); edit1.Text:= open_oldfile_dlg.FileName; |
Danach führe ich über den die Komponente DosCommand einen CreatProces aus:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34:
| CommandLine:= 'avr\avrdude.exe '; Form1.DosCommand_Atmel.WorkingDirectory:='avr\'; for i:= rpp_unit.parameter_begin to pred(rpp_unit.param_value) do begin if v_edit[i].Name = 'SCHNITTSTELLE' then CommandLine:= CommandLine+ '-P '+ v_edit[i].Text+' '; if v_edit[i].Name = 'PROGRAMMER' then CommandLine:= CommandLine+ '-c '+ v_edit[i].Text+' '; if v_edit[i].Name = 'PROCESSOR' then begin value:= v_edit[i].Text; Delete(value,1,Pos('"',value)); Delete(value,Pos('"',value),1); CommandLine:= CommandLine+ '-p '+ value+' '; end; if v_edit[i].Name = 'FUSE' then CommandLine:= CommandLine+v_edit[i].Text+' '; if v_edit[i].Name = 'DATEI' then CommandLine:= CommandLine+ '-U flash:w:"'+ Form1.Edit1.Text+'":a '; <-- hier wird der Pfad aus dem EditFeld eingefügt if v_edit[i].Name = 'CHIPPARAMETER' then CommandLine:= CommandLine+v_edit[i].Text+' '; if v_edit[i].Name = 'EEPROMDATEI' then begin if v_edit[i].Text<>''then begin CommandLine:= CommandLine+'-U eeprom:w:"'+v_edit[i].Text+'":a '; end; end;
end;
Form1.DosCommand_Atmel.CommandLine:= CommandLine; |
Wenn ich das ganze dann ausführe erhalte ich eine Exception:
Im Projekt rt_upp.exe ist eine Exception der Klasse TCreateProcessError mit der Meldung 'avr\avrdude.exe -p m88p -P usb -U flash:w:"T:\PRODUKT-DATEN\53_Software\530004\1.1\530004 kuehler 1.1.0.hex":a -c avrispmkII -U lfuse:w:0xd2:m -U hfuse:w:0xdc:m -U efuse:w:0x1:m -e doesn't exist.' aufgetreten.
Wenn ich aber den gleichen Pfad, also T:\PRODUKT-DATEN\53_Software\530004\1.1\530004 kuehler 1.1.0.hex in das Editfeld eintrage und dann den restlichen Code ausführe funktioniert alles tadellos.
Weis jemand Rat?
Nersgatt - Do 26.06.14 15:51
Ich vermute, dass er die exe (avrdude.exe) nicht findet. Das wird mit dem Parameter so direkt nichts zu tun haben.
Versuch mal, ob es klappt, wenn Du in der ersten Zeile Commandline := 'c:\kompletter\Pfad\zu\avrdude\avr\avrdude.exe' angibst.
baumina - Do 26.06.14 15:54
Interessant was genau in beiden Fällen (geht nicht / geht) in der Variable CommandLine genau drin steht und wie sich der Inhalt voneinander unterscheidet (ggf. in eine Datei schreiben.
daywalker0086 - Do 26.06.14 16:03
ich lasse mir mit showmessage den gesamten Commandlinestring ausgeben bevor dieser mit
Delphi-Quelltext
1:
| form1.DosCommand_Atmel.Execute; |
ausgeführt wird.
Einmal wenn ich den Pfad in das Editfeld händisch kopiert habe ( kein Fehler)
---------------------------
rt_upp
---------------------------
avr\avrdude.exe -p m88p -P usb -U flash:w:"T:\PRODUKT-DATEN\53_Software\530004\1.1\530004 Oelkuehler 1.1.0.hex":a -c avrispmkII -U lfuse:w:0xd2:m -U hfuse:w:0xdc:m -U efuse:w:0x1:m -e
---------------------------
OK
---------------------------
Nochmal wen nich den Pfad mit opendialog eitragen lasse (FEHLER)
---------------------------
rt_upp
---------------------------
avr\avrdude.exe -p m88p -P usb -U flash:w:"T:\PRODUKT-DATEN\53_Software\530004\1.1\530004 Oelkuehler 1.1.0.hex":a -c avrispmkII -U lfuse:w:0xd2:m -U hfuse:w:0xdc:m -U efuse:w:0x1:m -e
---------------------------
OK
---------------------------
die Exception tritt laut Delphi in folgendem Codeabschnitt der Komponente DosCommand auf:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| if not (CreateProcess(nil, app_spawn, nil, nil, TRUE, CreationFlagValues[Ord(FCreationFlag)] or FPriority, nil, app_wdirectory, si, pi)) then begin FCreateProcessError := TCreateProcessError.Create(string(app_spawn) + ' doesn''t exist.'); raise FCreateProcessError; <---HIER TRITT DER FEHLER AUF Exit; |
baumina - Do 26.06.14 16:26
Interessant wäre auch noch der genaue Fehler ShowMessage(SysErrorMessage(GetLastError))
Nersgatt - Do 26.06.14 16:58
Setz mal den Haken open_oldfile_dlg.Option ofNoChangeDir.
Das Problem ist, dass der TOpenDialog das Arbeitsverzeichnis ändert und daher die exe nicht mehr gefunden wird (wie ich oben schon schrieb).
Die saubere Lösung ist, den kompletten Pfad zur Exe anzugeben (siehe oben).
daywalker0086 - Fr 27.06.14 07:34
Moin an alle,
der Hinweis mit dem Arbeitsverzeichnis war natürlich der Richtige, habe nichtmehr an sowas gedacht.
Vielen dank wie die wie immer kompetente Hilfe.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!