我有一个控制台应用程序,我从GUI应用程序启动.控制台应用程序获取文件名的参数以进行解析和处理.目前我能够捕获其输出并将其显示在GUI应用程序中,但我希望能够向其发送命令以便控制甚至停止其执行.
如何向控制台应用程序发送命令或字符串或任何内容,最好使用我打开的管道来读取其输出?
const
CReadBuffer = 2400;
var
saSecurity: TSecurityAttributes;
hRead: THandle;
hWrite: THandle;
suiStartup: TStartupInfo;
piProcess: TProcessInformation;
pBuffer: array[0..CReadBuffer] of AnsiChar;
dRead: DWord;
dRunning: DWord;
dWritten: DWord;
Command: String;
BytesLeft: Integer;
BytesAvail: Integer;
begin
saSecurity.nLength := SizeOf(TSecurityAttributes);
saSecurity.bInheritHandle := True;
saSecurity.lpSecurityDescriptor := nil;
if CreatePipe(hRead, hWrite, @saSecurity, 0) then
begin
FillChar(suiStartup, SizeOf(TStartupInfo), #0);
suiStartup.cb := SizeOf(TStartupInfo);
suiStartup.hStdInput := hRead;
suiStartup.hStdOutput := hWrite;
suiStartup.hStdError := hWrite;
suiStartup.dwFlags := STARTF_USESTDHANDLES or STARTF_USESHOWWINDOW;
suiStartup.wShowWindow := SW_HIDE;
Command := 'messageparser.exe c:\messagefile.msg';
UniqueString(Command);
if CreateProcess(nil, …
Run Code Online (Sandbox Code Playgroud) 我有一个应用程序,在启动时检查一些条件,并在主窗体的OnShow事件中启动外部程序.问题是如果启动外部程序时出错,我希望应用程序立即终止.但是有一个问题,因为EurekaLog捕获了我的异常并以某种方式通过否定所有调用Application.Teminate
和任何其他正常关闭方法来中断消息循环.
所以这是我的问题,当这种情况存在时,ExitProcess是否是立即终止我的应用程序的最佳途径?