![](/img/trans.png)
[英]Java console Input/Output/Error redirection to another (Delphi) application
[英]Implementing Input/Output redirection in a Delphi console application
我有一個Delphi 7(不是2007年)應用程序(不稱其為App1.exe),IDE認為它是一個GUI應用程序,但在DPR中,它是一個編譯器指令,可將其導入控制台應用程序。 例:
{$IFDE MAKE_CONSOLE}
{$APPTYPE CONSOLE}
{$ENDIF MAKE_CONSOLE}
在生成過程中,可能會定義MAKE_CONSOLE。
我遇到的問題是,我們有另一個使用WinAPI CreateProcess運行App1.exe的控制台應用程序(例如App2.exe)。 發生時,從哪里都看不到App1.exe的輸出:-(當直接從命令行(cmd.exe)運行App1.exe時,輸出將顯示在命令行窗口中。
我猜想我需要使用STARTUPINFO結構重定向CreateProcess中App1.exe的輸出。 我不確定在這里要做什么。
其他信息:*正在使用的'dwCreationFlags'是:CREATE_NEW_PROCESS_GROUP + NORMAL_PRIORITY_CLASS + DEBUG_PROCESS(是,App2調試App1)
'bInheritHandles'為假(是否需要更改?)。
'lpProcessAttributes'和'lpThreadAttributes'均為零,'lpEnvironment'和'lpCurrentDirectory'也是。
我是否錯過了任何需要幫助我的信息?
任何指針都很棒!
提前謝謝了。
這是我用於從Deplhi 7調用命令行程序的一些代碼。
如果將“ Visibility”參數設置為0,而不是“ SW_SHOWNORMAL”,則它可以重定向到(主調用exe的)當前控制台。
function WinExecAndWait(const FileName: String; Visibility: integer): cardinal;
var StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
Options: cardinal;
begin
FillChar(StartupInfo,Sizeof(StartupInfo),0);
StartupInfo.cb := Sizeof(StartupInfo);
StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow := Visibility;
if Visibility=0 then begin
Flush(Output);
Options := NORMAL_PRIORITY_CLASS;
end else
Options := CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS;
if not CreateProcess(nil,
pointer(FileName), { pointer to command line string }
nil, { pointer to process security attributes }
nil, { pointer to thread security attributes }
false, { handle inheritance flag }
Options, { creation flags }
nil, { pointer to new environment block }
nil, { pointer to current directory name }
StartupInfo, { pointer to STARTUPINFO }
ProcessInfo) then { pointer to PROCESS_INF }
Result := cardinal(-1) else begin
WaitforSingleObject(ProcessInfo.hProcess,INFINITE);
GetExitCodeProcess(ProcessInfo.hProcess,Result);
end;
end;
您是否有機會在流程創建標志中包含DETACHED_PROCESS? 繼承父控制台應該是默認設置。
此MSDN文章討論了App2如何重定向App1的輸出:
Martin Lafferty的ConsoleApp可以出色地重定向控制台程序的輸出。 您將獲得一個事件處理程序,該事件處理程序將被控制台輸出的每一行調用。
我找不到該代碼的官方主頁,但這里是Embarcadero的頁面:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.