|
做了一个测试程序如下:
program project1;
{$mode objfpc}{$H+}
uses
Classes, Process, SysUtils;
var
FirstProcess: TProcess;
Buffer: array[0..256] of char;
ReadCount: Integer;
ReadSize: Integer;
begin
FirstProcess := TProcess.Create(nil);
FirstProcess.Options := [poUsePipes];
FirstProcess.CommandLine := 'dir c:\windows';
FirstProcess.Execute;
while FirstProcess.Running or (FirstProcess.Output.NumBytesAvailable > 0) do
begin
if FirstProcess.Output.NumBytesAvailable > 0 then
begin
ReadSize := FirstProcess.Output.NumBytesAvailable;
if ReadSize > SizeOf(Buffer) then
ReadSize := SizeOf(Buffer);
ReadCount := FirstProcess.Output.Read(Buffer[0], ReadSize);
Write(StdOut, Copy(Buffer, 0, ReadCount));
end;
end;
Beep;
Sleep(3000);
FirstProcess.Free;
end.
编译执行会出错,但如果把commandline改成
FirstProcess.CommandLine := 'cmd.exe /c "dir c:\windows"';
就会正常执行,而测试用"ping localhost"命令则不需要这样设置。
对此很是头疼,不知怎样界定这些command,请达人指点,谢谢。 |
|