delphi – 执行后台程序并继续执行代码?

delphi – 执行后台程序并继续执行代码?,第1张

概述我想从我的Delphi代码运行后台应用程序.打开的应用程序是基于DOS的EXE,它将内容输出到DOS窗口.该程序将无限期地打开,直到它从任务管理器关闭.我用来打开应用程序的当前代码是; procedure CaptureConsoleOutput(const ACommand, AParameters: String; CallBack: TArg<PAnsiChar>);const C 我想从我的Delphi代码运行后台应用程序.打开的应用程序是基于DOS的EXE,它将内容输出到DOS窗口.该程序将无限期地打开,直到它从任务管理器关闭.我用来打开应用程序的当前代码是;

procedure CaptureConsoleOutput(const ACommand,AParameters: String; CallBack: TArg<PAnsiChar>);const    CReadBuffer = 2400;var    saSecurity: TSecurityAttributes;    hRead: THandle;    hWrite: THandle;    suiStartup: TStartupInfo;    piProcess: TProcessinformation;    pBuffer: array [0 .. CReadBuffer] of AnsiChar;    dBuffer: array [0 .. CReadBuffer] of AnsiChar;    dRead: DWord;    dRunning: DWord;begin    saSecurity.nLength := SizeOf(TSecurityAttributes);    saSecurity.b@R_419_5107@Handle := 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;        if CreateProcess(nil,pChar(ACommand + ' ' + AParameters),True,norMAL_PRIORITY_CLASS,nil,suiStartup,piProcess) then        begin            repeat                dRunning := WaitForSingleObject(piProcess.hProcess,100);                //Application.ProcessMessages();                repeat                    dRead := 0;                    Readfile(hRead,pBuffer[0],CReadBuffer,dRead,nil);                    if(dRead > 0) then                    begin                      pBuffer[dRead] := #0;                      //ShowMessage(pBuffer);                      //OemToAnsi(pBuffer,pBuffer);                      //Unicode support by lars Fosdal                      Oemtochara(pBuffer,dBuffer);                      CallBack(dBuffer);                    end;                until (dRead < CReadBuffer);            until (dRunning <> WAIT_TIMEOUT);            CloseHandle(piProcess.hProcess);            CloseHandle(piProcess.hThread);        end;        CloseHandle(hRead);        CloseHandle(hWrite);    end;end;

这很好,但是因为程序没有“退出”并永远保持打开状态,我的应用程序挂起,代码永远不会移动.

任何帮助,将不胜感激

解决方法 如果您不需要对生成的进程执行任何 *** 作,则只需关闭CreateProcess()返回的句柄并继续,该进程将继续运行.但是,由于您似乎需要从生成的进程的输出中连续读取,您只需将该逻辑移动到工作线程中,这样您的主代码就不会被阻止了. 总结

以上是内存溢出为你收集整理的delphi – 执行后台程序并继续执行代码?全部内容,希望文章能够帮你解决delphi – 执行后台程序并继续执行代码?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1268809.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存