![]() |
DOS-Anwendung aus Delphi startet, beendet sich aber sofort
Hallo
Ich wollte eine DOS-Anwendung, die mit TP geschrieben ist aus einer Delphi-Anwendung aufrufen. Die Anwendung wird zwar aufgerufen, jedoch beendet sich das DOS-Programm sofort wieder. Hier die Code-Zeilen, die die Anwendung ausführen:
Delphi-Quellcode:
die procedure hab ich hier in der code-library gefunden.
procedure ExecuteProgramm(const PFileName: string);
var SEInfo: TShellExecuteInfo; ExitCode: DWORD; ExecuteFile: string; begin ExecuteFile := '"' + PFileName + '"'; FillChar(SEInfo, SizeOf(SEInfo), 0); SEInfo.cbSize := SizeOf(TShellExecuteInfo); with SEInfo do begin fMask := SEE_MASK_NOCLOSEPROCESS; Wnd := Application.Handle; lpFile := PChar(ExecuteFile); nShow := SW_SHOWNORMAL; end; if ShellExecuteEx(@SEInfo) then begin repeat Application.ProcessMessages; GetExitCodeProcess(SEInfo.hProcess, ExitCode); until (ExitCode <> STILL_ACTIVE) or Application.Terminated; end else begin Application.MessageBox('Fehler beim Starten des Programms', 'Hinweis', MB_OK + MB_ICONERROR); end; end; Nun meine Frage: woran kann es liegen, dass die Anwendung sofort wieder beendet wird? liegts an der Art, wie sie aufgerufen wird oder an der Anwendung selbst? |
Re: DOS-Anwendung aus Delphi startet, beendet sich aber sofo
Zitat:
|
Re: DOS-Anwendung aus Delphi startet, beendet sich aber sofo
hallo
die Anwendung (die DOS) läuft normalerweise reibungslos, falls du das meinst mit "in Eigabeaufforderung" um zu überprüfen ob sie überhaupt funktioniert. andernfalls klär mich bitte darüber auf, was du gemeint hast. :) |
Re: DOS-Anwendung aus Delphi startet, beendet sich aber sofo
Schließt sie sich auch sofort wieder, wenn du sie über den Explorere mit einem Doppelklick ausführst? Das ist das entscheidende. Ansinsten musst du dem Kommandozeileninterpreter mit der Anwendung als Parameter aufrufen und dem Schalter /k.
|
Re: DOS-Anwendung aus Delphi startet, beendet sich aber sofo
über den explorer lässt sich einwandfrei mit der Anwendung arbeiten, also schliesst sie sich nicht.
Zitat:
|
Re: DOS-Anwendung aus Delphi startet, beendet sich aber sofo
Such dir was aus:
![]() ![]() ![]() |
Re: DOS-Anwendung aus Delphi startet, beendet sich aber sofo
:?: Momentmal bin ich blöd :?: Ich glaube es liegt daran, das du einfach
Delphi-Quellcode:
zu früh einsetzt. Kann sein, weil es noch niemand geschrieben hat das es nicht daran liegt. benutze es mal später. Weil sonst kann er dir garnicht den Befehl
Application.Terminate
Delphi-Quellcode:
zeigen, falls er gebraucht wird. Wenn dann benutze irgendwann anders mal
else
Delphi-Quellcode:
.
close;
Ich hoffe ich konnte dir helfen. (Bestimmt nicht) Gruss, Mindforce |
Re: DOS-Anwendung aus Delphi startet, beendet sich aber sofo
@Luckie: In der Tat, die hab ich gefunden, nur ich konnte nicht wirklich was damit anfangen...
Ich brauche einfach einen Code, der mir meine DOS-Anwendung ausführt, so dass ich mit ihr arbeiten kann. |
Re: DOS-Anwendung aus Delphi startet, beendet sich aber sofo
Das sollte Dir helfen, mir hat es jedenfalls einmal geholfen ist von
![]() Grüße Klaus
Delphi-Quellcode:
uses WinTypes, WinProcs, SysUtils; { WindowState is one of the SW_xxx constants. Look up ShowWindow in the API help for a list.} function ExecAndWait(const Filename, Params: string; WindowState: word): boolean; {$IFDEF WIN32} var SUInfo: TStartupInfo; ProcInfo: TProcessInformation; CmdLine: string; begin { Enclose filename in quotes to take care of long filenames with spaces. } CmdLine := '"' + Filename + '" ' + Params; FillChar(SUInfo, SizeOf(SUInfo), #0); with SUInfo do begin cb := SizeOf(SUInfo); dwFlags := STARTF_USESHOWWINDOW; wShowWindow := WindowState; end; Result := CreateProcess(NIL, PChar(CmdLine), NIL, NIL, FALSE, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, NIL, PChar(ExtractFilePath(Filename)), SUInfo, ProcInfo); { Wait for it to finish. } if Result then WaitForSingleObject(ProcInfo.hProcess, INFINITE); {$ELSE} var InstanceID : THandle; Buff: array[0..255] of char; begin StrPCopy(Buff, Filename + ' ' + Params); InstanceID := WinExec(Buff, WindowState); if InstanceID < 32 then { a value less than 32 indicates an Exec error } Result := FALSE else begin Result := TRUE; repeat Application.ProcessMessages; until Application.Terminated or (GetModuleUsage(InstanceID) = 0); end; {$ENDIF} end; |
Re: DOS-Anwendung aus Delphi startet, beendet sich aber sofo
jo, vielen dank! jetzt gehts. :spin2: :hello:
Kleiner Tipp noch von mir: als Parameter WidowState 1 eingeben, dann sieht man das Fenster. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:16 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz