Autor Beitrag
daywalker0086
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243


Delphi 2005 Architect
BeitragVerfasst: Do 26.06.14 15:40 
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:
ausblenden 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:
ausblenden volle Höhe 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\';        //immer mit Commandline Pfad verändern
  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;

 // c:\winavr\bin\avrdude.exe -e -P usb -c avrispmkII -p m88p -e -U lfuse:w:0xd2:m -U hfuse:w:0xdc:m -U efuse:w:0x1:m -U flash:w:"Oelkuehler.hex":a'
    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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: 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.

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
baumina
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 305
Erhaltene Danke: 61

Win 7
Delphi 10.2 Tokyo Enterprise
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243


Delphi 2005 Architect
BeitragVerfasst: Do 26.06.14 16:03 
ich lasse mir mit showmessage den gesamten Commandlinestring ausgeben bevor dieser mit
ausblenden 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:
ausblenden 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,
                        {CREATE_NEW_CONSOLE}{DETACHED_PROCESS}
                        CreationFlagValues[Ord(FCreationFlag)] or FPriority,
                        nil,
                        app_wdirectory,
                        si,
                        pi)) then
  begin
        //  —áŠO‚ðŽó‚¯Žæ‚éꊂª–³‚¢B
        //  ƒXƒŒƒbƒh‚Ì exitcode ‚É“ü‚ê‚é‚ׂ«HB
    FCreateProcessError := TCreateProcessError.Create(string(app_spawn)
      + ' doesn''t exist.');
    raise FCreateProcessError; <---HIER TRITT DER FEHLER AUF
    Exit;
baumina
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 305
Erhaltene Danke: 61

Win 7
Delphi 10.2 Tokyo Enterprise
BeitragVerfasst: Do 26.06.14 16:26 
Interessant wäre auch noch der genaue Fehler ShowMessage(SysErrorMessage(GetLastError))
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: 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).

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
daywalker0086 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243


Delphi 2005 Architect
BeitragVerfasst: 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.