Autor |
Beitrag |
TigerOnTour
Hält's aus hier
Beiträge: 3
Win2000 + WinXp pro + WinXP Home
D5 Prof
|
Verfasst: Mo 01.08.05 23:30
Hallo,
ich bin neu hier im Forum daher erst mal einen Gruß an alle !
Und auch gleich eine Frage !
Ich muß durch ein externes Programm eine Datei konvertieren lassen und das Ergebniss dann wieder einlesen.
Das ganze klappt ( nur dank der Tipps hier aus dem Forum ) unter WinXP Pro und Win2000 auch ganz gut.
Nur bei WinXP Home habe ich keinen Erfolg, das externe Programm wird zwar aufgerufen aber keine Ausgabedatei erzeugt. Es werden als Parameter die Quell und die Zieldatei übergeben.
Das ganze funktioniert mit der Commandozeile auch unter XPHome ohne Probleme.
Ich habe schon alle Varianten von CreateProzess und ShellExecute die ich hier im Forum gefunden habe durch!
Kennt jemand das Problem mit WinXP Home, und kann mir helfen?
Gibt es da eventuell Unterschiede in der API ?
Bin für jeden Tipp dankbar !
Gruß !
Manfred
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 02.08.05 00:30
"Hier mit begrüße ich sie zu einer neuen Runde der Quizz Show 'Rate den Code' auf www.delphi-forum.de. Wie immer leitet sie durch die Show ihr Quizzmaster Luuuuuu-uuuuuckiiiiieeeeee."
"Das Delphi-Forum hat mal wieder nicht mit Preisen gespart. Wer zu erst den exakten, nicht funktionierenden Code hier postet, bekommt eine aufblasbare Waschmaschine. Wer als erster funktionierenden Code postet, muss leider ausscheiden, da da dies wohl nicht Sinn des Postings des Kandidaten war."
"Ja wer wagt es als erster? Wer ist der mutige erste Poster? Wer hat die Glaskugel?"
"Ein paar Tipps wurden ja schon gegeben: Shellexecute und CreateProcess. Wie genau diese Funktionen implementiert wurden, wurde natürlich verschwiegen, wir wollen es ja nicht zu einfach machen! Gelle?  "
"Also los, haut in die Tasten, lasst eure Debugger glühen."
"Einsendeschluss ist bis der erste Moderator hier auftaucht und die Kameras im Studio hier ausknippst."
|
|
TigerOnTour 
Hält's aus hier
Beiträge: 3
Win2000 + WinXp pro + WinXP Home
D5 Prof
|
Verfasst: Di 02.08.05 07:55
Sorry !
Ich hatte gedacht ich erzeuge nur unnötig Text da ich ja schon alle, wie auch geschrieben, Varianten von CreateProzess und ShellExecute die ich hier im Forum gepostet wurden, durch habe und der Code auch im Prinzip funktioniert !
Beide Codes funktionieren unter Win2000 und WinXP Pro. nur halt nicht unter XPHome, dort erzeugt das aufgerufene Programm keine Ausgabedatei.
Also hier die Nachlieferung!
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:
| E := Appdir+'axe2itn.exe'; S := Appdir+'axe.axe'; D := Appdir+'axe.tmp'; Ok := false; FileCopy(Opendialog.FileName,S); if FindFirst(E, faAnyFile, sr) = 0 then begin FillChar(StartupInfo, SizeOf(TStartupInfo), 0); StartupInfo.cb := Sizeof(TStartupInfo); StartupInfo.dwFlags := STARTF_USESHOWWINDOW OR STARTF_USESTDHANDLES; StartupInfo.wShowWindow:=SW_HIDE; if CreateProcess(PChar(E), PChar(' '+S+' '+D), nil, nil, true, CREATE_DEFAULT_ERROR_MODE or CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, PChar(AppDir), StartupInfo, ProcessInfo) then begin WaitForSingleObject(ProcessInfo.hProcess, INFINITE); CloseHandle(ProcessInfo.hProcess); Ok := true; end else MessageDLG('Fehler bei der Ausführung des externen Programms',mtError, [mbAbort], 0);} end else MessageDLG('Externes Programm nicht gefunden',mtError, [mbAbort], 0); |
Die auskommentierte Zeile mit ShellExecute_AndWait habe ich auf SwissDelphi gefunden zeigt aber das gleiche Ergebniss, keine Funktion unter XPHome. Hier der Code der Funktion
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: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64:
| function TForm1.ShellExecute_AndWait(Operation, FileName, Parameter, Directory: string; Show: Word; bWait: Boolean): Longint; var bOK: Boolean; Info: TShellExecuteInfo;
begin FillChar(Info, SizeOf(Info), Chr(0)); Info.cbSize := SizeOf(Info); Info.fMask := SEE_MASK_NOCLOSEPROCESS; Info.lpVerb := PChar(Operation); Info.lpFile := PChar(FileName); Info.lpParameters := PChar(Parameter); Info.lpDirectory := PChar(Directory); Info.nShow := Show; bOK := Boolean(ShellExecuteEx(@Info)); if bOK then begin if bWait then begin while WaitForSingleObject(Info.hProcess, 100) = WAIT_TIMEOUT do Application.ProcessMessages; bOK := GetExitCodeProcess(Info.hProcess, DWORD(Result)); end else Result := 0; end; if not bOK then Result := -1; end; |
Gruß !
Manfred
Moderiert von AXMD: Code- durch Delphi-Tags ersetzt.
|
|
Heiko
      
Beiträge: 3169
Erhaltene Danke: 11
|
Verfasst: Di 02.08.05 08:38
Bei mir unter XP Home funktioniert CreatProcess und so tadellos. Hier mal die Prozedur mit der ich arbeite (Sie funktioniert auch unter Win95  ):
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:
| var Beenden: Boolean=false;
procedure ExecuteFile(const AFilename: String; AParameter: String; AWait: Boolean); var si: TStartupInfo; pi: TProcessInformation; begin FillChar(si, SizeOf(si), 0); with si do begin cb:=SizeOf(si); dwFlags:=STARTF_USESHOWWINDOW; wShowWindow:=SW_NORMAL; end; FillChar(pi, SizeOf(pi), 0); if CreateProcess(PChar(AFilename), PChar(AParameter), nil, nil, False, CREATE_DEFAULT_ERROR_MODE or CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, si, pi) then try if AWait then while (not Beenden) and(WaitForSingleObject(pi.hProcess, 50)<>Wait_Object_0) do begin Application.ProcessMessages end finally CloseHandle(pi.hProcess); CloseHandle(pi.hThread) end end; |
|
|
TigerOnTour 
Hält's aus hier
Beiträge: 3
Win2000 + WinXp pro + WinXP Home
D5 Prof
|
Verfasst: Di 02.08.05 22:30
Hallo Heiko,
Danke für den Code.
Ich habe den Code eben getestet.
Gleiches Ergebnis wie mit den andern Codes. Win2000, WinXP pro = Ok.
WinXP Home nix ist, Datei wird nicht erzeugt.
Ist aber gut anzuwenden daher auf jeden Fall schon mal was dazu gelernt.
Kann ich eventuell an den Systemeintellungen von XP Home was drehen, gibt es da eine mögliche Fehlerquelle ?
Wenn die Ausführung des Programms in der Comandozeile nicht fünktionieren würde, könnte es ja an dem aufgerufenen Programm liege, aber da geht auch unter XP Home alles wie erwartet.
Alle Tests wurden mit Admin Privs. geführt.
Bin echt ratlos. 
|
|
Heiko
      
Beiträge: 3169
Erhaltene Danke: 11
|
Verfasst: Mi 03.08.05 09:25
Ich schick der per PN mal ein Link zu einem Programm, wo du mir mal das Ergebnis sagen sollst (also ob es dort funktioniert).
|
|
|