我正在尝试使用ShellExecuteEx在同一命令行中运行多个任务。我在cmd.exe中运行它没有问题,如下所示:
C:\Program Files (x86)\AppFolder>App.exe MyTask1&&App.exe MyTask2
Running task: Task1
Table: Task1 100
Complete
Running task: Task2
Table: Task2 100
Complete
C:\Program Files (x86)\AppFolder>
现在,这是我的Delphi中的ShellExecuteEx版本,运行一个任务没有任何问题:
procedure TfrmGTX.btnQBSyncClick(Sender: TObject);
var
FileName, Parameters, Folder, Directory: string;
sei: TShellExecuteInfo;
Error: DWORD;
OK: boolean;
begin
Folder := 'C:\Program Files (x86)\AppFolder\';
FileName := Folder + 'App.exe';
Parameters := 'MyTask1';
ZeroMemory(@sei, SizeOf(sei));
sei.cbSize := SizeOf(sei);
sei.lpFile := PChar(FileName);
sei.lpParameters := PChar(Parameters);
sei.lpDirectory := PChar(Folder);
sei.nShow := SW_SHOWNORMAL;
OK := ShellExecuteEx(@sei);
if not OK then
begin
Error := GetLastError;
ShowMessage('Error: ' + IntToStr(Error));
end;
end;
我想要实现的是使用ShellExecuteEx一个接一个地运行2个任务。他们之间没有先决条件/关系。它的功能相同,但是为我的数据库中的不同表提供数据。
我的问题是:
我更喜欢第一个,因为它更清洁,并且在ShellExecuteEx的功能范围内。
我看过一些作品说我应该单独运行它们或创建一些脚本。
这是@ Alex_89共享的ExecuteDOSOutput的结果。因此,它在一个触发器中运行多个任务,并能够在MyApp TMemo中捕获结果。除了结果与我的预期不同之外:
Running task: Task1
Table: A_SALES 0% ◘◘◘0% ◘◘◘0% ◘◘◘0% ◘◘◘0% ◘◘◘1% ◘◘◘1% ◘◘◘1% ◘◘◘1% ◘◘◘1% ◘◘◘1% ◘◘◘1% ◘◘◘1% ◘◘◘1% ◘◘◘2% ◘◘◘2% ◘◘◘2% ◘◘◘2% ◘◘◘2% ◘◘◘2% ◘◘◘2% ◘◘◘2% ◘◘◘2% ◘◘◘3% ◘◘◘3% ◘◘◘3% ◘◘◘3% ◘◘◘3% ◘◘◘3% ◘◘◘3% ◘◘◘3% ◘◘◘3% ◘◘◘4% ◘◘◘4% ◘◘◘4% ◘◘◘4% ◘◘◘4% ◘◘◘4% ◘◘◘4% ◘◘◘4% ◘◘◘4% ◘◘◘5% ◘◘◘5% ◘◘◘5% ◘◘◘5% ◘◘◘5% ◘◘◘5% ◘◘◘5% ◘◘◘5% ◘◘◘5% ◘◘◘6% ◘◘◘6% ◘◘◘6% ◘◘◘6% ◘◘◘6% ◘◘◘6% ◘◘◘6% ◘◘◘6% ◘◘◘7% ◘◘◘7% ◘◘◘7% ◘◘◘7% ◘◘◘7% ◘◘◘7% ◘◘◘7% ◘◘◘7% ◘◘◘7% ◘◘◘8% ◘◘◘8% ◘◘◘8% ◘◘◘8% ◘◘◘8% ◘◘◘8% ◘◘◘8% ◘◘◘8% ◘◘◘8% ◘◘◘9% ◘◘◘9% ◘◘◘9% ◘◘◘9% ◘◘◘9% ◘◘◘9% ◘◘◘9% ◘◘◘9% ◘◘◘9% ◘◘◘10%◘◘◘10%◘◘◘10%◘◘◘10%◘◘◘10%◘◘◘10%◘◘◘10%◘◘◘10%◘◘◘10%◘◘◘11%◘◘◘11%◘◘◘11%◘◘◘11%◘◘◘11%◘◘◘11%◘◘◘11%◘◘◘11%◘◘◘11%◘◘◘12%◘◘◘12%◘◘◘12%◘◘◘12%◘◘◘12%◘◘◘12%◘◘◘12%◘◘◘12%◘◘◘12%◘◘◘13%◘◘◘13%◘◘◘13%◘◘◘13%◘◘◘13%◘◘◘13%◘◘◘13%◘◘◘13%◘◘◘13%◘◘◘14%◘◘◘14%◘◘◘14%◘◘◘14%◘◘◘14%◘◘◘14%◘◘◘14%◘◘◘14%◘◘◘14%◘◘◘15%◘◘◘15%◘◘◘15%◘◘◘15%◘◘◘15%◘◘◘15%◘◘◘15%◘◘◘15%◘◘◘15%◘◘◘16%◘◘◘16%◘◘◘16%◘◘◘16%◘◘◘16%◘◘◘16%◘◘◘16%◘◘◘16%◘◘◘16%◘◘◘17%◘◘◘17%◘◘◘17%◘◘◘17%◘◘◘17%◘◘◘17%◘◘◘17%◘◘◘17%◘◘◘17%◘◘◘18%◘◘◘18%◘◘◘18%◘◘◘18%◘◘◘18%◘◘◘18%◘◘◘18%◘◘◘18%◘◘◘18%◘◘◘19%◘◘◘19%◘◘◘19%◘◘◘19%◘◘◘19%◘◘◘19%◘◘◘19%◘◘◘19%◘◘◘20%◘◘◘20%◘◘◘20%◘◘◘20%◘◘◘20%◘◘◘20%◘◘◘20%◘◘◘20%◘◘◘20%◘◘◘21%◘◘◘21%◘◘◘21%◘◘◘21%◘◘◘21%◘◘◘21%◘◘◘21%◘◘◘21%◘◘◘21%◘◘◘22%◘◘◘22%◘◘◘22%◘◘◘22%◘◘◘22%◘◘◘22%◘◘◘22%◘◘◘22%◘◘◘22%◘◘◘23%◘◘◘23%◘◘◘23%◘◘◘23%◘◘◘23%◘◘◘23%◘◘◘23%◘◘◘23%◘◘◘23%◘◘◘24%◘◘◘24%◘◘◘24%◘◘◘24%◘◘◘24%◘◘◘24%◘◘◘24%◘◘◘24%◘◘◘24%◘◘◘25%◘◘◘25%◘◘◘25%◘◘◘25%◘◘◘25%◘◘◘25%◘◘◘25%◘◘◘25%◘◘◘25%◘◘◘26%◘◘◘26%◘◘◘26%◘◘◘26%◘◘◘26%◘◘◘26%◘◘◘26%◘◘◘26%◘◘◘26%◘◘◘27%◘◘◘27%◘◘◘27%◘◘◘27%◘◘◘27%◘◘◘27%◘◘◘27%◘◘◘27%◘◘◘27%◘◘◘28%◘◘◘28%◘◘◘28%◘◘◘28%◘◘◘28%◘◘◘28%◘◘◘28%◘◘◘28%◘◘◘28%◘◘◘29%◘◘◘29%◘◘◘29%◘◘◘29%◘◘◘29%◘◘◘29%◘◘◘29%◘◘◘29%◘◘◘29%◘◘◘30%◘◘◘30%◘◘◘30%◘◘◘30%◘◘◘30%◘◘◘30%◘◘◘30%◘◘◘30%◘◘◘30%◘◘◘31%◘◘◘31%◘◘◘31%◘◘◘31%◘◘◘31%◘◘◘31%◘◘◘31%◘◘◘31%◘◘◘31%◘◘◘32%◘◘◘32%◘◘◘32%◘◘◘32%◘◘◘32%◘◘◘32%◘◘◘32%◘◘◘32%◘◘◘32%◘◘◘33%◘◘◘33%◘◘◘33%◘◘◘33%◘◘◘33%◘◘◘33%◘◘◘33%◘◘◘33%◘◘◘34%◘◘◘34%◘◘◘34%◘◘◘34%◘◘◘34%◘◘◘34%◘◘◘34%◘◘◘34%◘◘◘34%◘◘◘35%◘◘◘35%◘◘◘35%◘◘◘35%◘◘◘35%◘◘◘35%◘◘◘35%◘◘◘35%◘◘◘35%◘◘◘36%◘◘◘36%◘◘◘36%◘◘◘36%◘◘◘36%◘◘◘36%◘◘◘36%◘◘◘36%◘◘◘36%◘◘◘37%◘◘◘37%◘◘◘37%◘◘◘37%◘◘◘37%◘◘◘37%◘◘◘37%◘◘◘37%◘◘◘37%◘◘◘38%◘◘◘38%◘◘◘38%◘◘◘38%◘◘◘38%◘◘◘38%◘◘◘38%◘◘◘38%◘◘◘38%◘◘◘39%◘◘◘39%◘◘◘39%◘◘◘39%◘◘◘39%◘◘◘39%◘◘◘39%◘◘◘39%◘◘◘39%◘◘◘40%◘◘◘40%◘◘◘40%◘◘◘40%◘◘◘40%◘◘◘40%◘◘◘40%◘◘◘40%◘◘◘40%◘◘◘41%◘◘◘41%◘◘◘41%◘◘◘41%◘◘◘41%◘◘◘41%◘◘◘41%◘◘◘41%◘◘◘41%◘◘◘42%◘◘◘42%◘◘◘42%◘◘◘42%◘◘◘42%◘◘◘42%◘◘◘42%◘◘◘42%◘◘◘42%◘◘◘43%◘◘◘43%◘◘◘43%◘◘◘43%◘◘◘43%◘◘◘43%◘◘◘43%◘◘◘43%◘◘◘43%◘◘◘44%◘◘◘44%◘◘◘44%◘◘◘44%◘◘◘44%◘◘◘44%◘◘◘44%◘◘◘44%◘◘◘44%◘◘◘45%◘◘◘45%◘◘◘45%◘◘◘45%◘◘◘45%◘◘◘45%◘◘◘45%◘◘◘45%◘◘◘45%◘◘◘46%◘◘◘46%◘◘◘46%◘◘◘46%◘◘◘46%◘◘◘46%◘◘◘46%◘◘◘46%◘◘◘46%◘◘◘47%◘◘◘47%◘◘◘47%◘◘◘47%◘◘◘47%◘◘◘47%◘◘◘47%◘◘◘47%◘◘◘48%◘◘◘48%◘◘◘48%◘◘◘48%◘◘◘48%◘◘◘48%◘◘◘48%◘◘◘48%◘◘◘48%◘◘◘49%◘◘◘49%◘◘◘49%◘◘◘49%◘◘◘49%◘◘◘49%◘◘◘49%◘◘◘49%◘◘◘49%◘◘◘50%◘◘◘50%◘◘◘50%◘◘◘50%◘◘◘50%◘◘◘50%◘◘◘50%◘◘◘50%◘◘◘50%◘◘◘51%◘◘◘51%◘◘◘51%◘◘◘51%◘◘◘51%◘◘◘51%◘◘◘51%◘◘◘51%◘◘◘51%◘◘◘52%◘◘◘52%◘◘◘52%◘◘◘52%◘◘◘52%◘◘◘52%◘◘◘52%◘◘◘52%◘◘◘52%◘◘◘53%◘◘◘53%◘◘◘53%◘◘◘53%◘◘◘53%◘◘◘53%◘◘◘53%◘◘◘53%◘◘◘53%◘◘◘54%◘◘◘54%◘◘◘54%◘◘◘54%◘◘◘54%◘◘◘54%◘◘◘54%◘◘◘54%◘◘◘54%◘◘◘55%◘◘◘55%◘◘◘55%◘◘◘55%◘◘◘55%◘◘◘55%◘◘◘55%◘◘◘55%◘◘◘55%◘◘◘56%◘◘◘56%◘◘◘56%◘◘◘56%◘◘◘56%◘◘◘56%◘◘◘56%◘◘◘56%◘◘◘56%◘◘◘57%◘◘◘57%◘◘◘57%◘◘◘57%◘◘◘57%◘◘◘57%◘◘◘57%◘◘◘57%◘◘◘57%◘◘◘58%◘◘◘58%◘◘◘58%◘◘◘58%◘◘◘58%◘◘◘58%◘◘◘58%◘◘◘58%◘◘◘58%◘◘◘59%◘◘◘59%◘◘◘59%◘◘◘59%◘◘◘59%◘◘◘59%◘◘◘59%◘◘◘59%◘◘◘59%◘◘◘60%◘◘◘60%◘◘◘60%◘◘◘60%◘◘◘60%◘◘◘60%◘◘◘60%◘◘◘60%◘◘◘60%◘◘◘61%◘◘◘61%◘◘◘61%◘◘◘61%◘◘◘61%◘◘◘61%◘◘◘61%◘◘◘61%◘◘◘62%◘◘◘62%◘◘◘62%◘◘◘62%◘◘◘62%◘◘◘62%◘◘◘62%◘◘◘62%◘◘◘62%◘◘◘63%◘◘◘63%◘◘◘63%◘◘◘63%◘◘◘63%◘◘◘63%◘◘◘63%◘◘◘63%◘◘◘63%◘◘◘64%◘◘◘64%◘◘◘64%◘◘◘64%◘◘◘64%◘◘◘64%◘◘◘64%◘◘◘64%◘◘◘64%◘◘◘65%◘◘◘65%◘◘◘65%◘◘◘65%◘◘◘65%◘◘◘65%◘◘◘65%◘◘◘65%◘◘◘65%◘◘◘66%◘◘◘66%◘◘◘66%◘◘◘66%◘◘◘66%◘◘◘66%◘◘◘66%◘◘◘66%◘◘◘66%◘◘◘67%◘◘◘67%◘◘◘67%◘◘◘67%◘◘◘67%◘◘◘67%◘◘◘67%◘◘◘67%◘◘◘67%◘◘◘68%◘◘◘68%◘◘◘68%◘◘◘68%◘◘◘68%◘◘◘68%◘◘◘68%◘◘◘68%◘◘◘68%◘◘◘69%◘◘◘69%◘◘◘69%◘◘◘69%◘◘◘69%◘◘◘69%◘◘◘69%◘◘◘69%◘◘◘69%◘◘◘70%◘◘◘70%◘◘◘70%◘◘◘70%◘◘◘70%◘◘◘70%◘◘◘70%◘◘◘70%◘◘◘70%◘◘◘71%◘◘◘71%◘◘◘71%◘◘◘71%◘◘◘71%◘◘◘71%◘◘◘71%◘◘◘71%◘◘◘71%◘◘◘72%◘◘◘72%◘◘◘72%◘◘◘72%◘◘◘72%◘◘◘72%◘◘◘72%◘◘◘72%◘◘◘72%◘◘◘73%◘◘◘73%◘◘◘73%◘◘◘73%◘◘◘73%◘◘◘73%◘◘◘73%◘◘◘73%◘◘◘73%◘◘◘74%◘◘◘74%◘◘◘74%◘◘◘74%◘◘◘74%◘◘◘74%◘◘◘74%◘◘◘74%◘◘◘74%◘◘◘75%◘◘◘75%◘◘◘75%◘◘◘75%◘◘◘75%◘◘◘75%◘◘◘75%◘◘◘75%◘◘◘76%◘◘◘76%◘◘◘76%◘◘◘76%◘◘◘76%◘◘◘76%◘◘◘76%◘◘◘76%◘◘◘76%◘◘◘77%◘◘◘77%◘◘◘77%◘◘◘77%◘◘◘77%◘◘◘77%◘◘◘77%◘◘◘77%◘◘◘77%◘◘◘78%◘◘◘78%◘◘◘78%◘◘◘78%◘◘◘78%◘◘◘78%◘◘◘78%◘◘◘78%◘◘◘78%◘◘◘79%◘◘◘79%◘◘◘79%◘◘◘79%◘◘◘79%◘◘◘79%◘◘◘79%◘◘◘79%◘◘◘79%◘◘◘80%◘◘◘80%◘◘◘80%◘◘◘80%◘◘◘80%◘◘◘80%◘◘◘80%◘◘◘80%◘◘◘80%◘◘◘81%◘◘◘81%◘◘◘81%◘◘◘81%◘◘◘81%◘◘◘81%◘◘◘81%◘◘◘81%◘◘◘81%◘◘◘82%◘◘◘82%◘◘◘82%◘◘◘82%◘◘◘82%◘◘◘82%◘◘◘82%◘◘◘82%◘◘◘82%◘◘◘83%◘◘◘83%◘◘◘83%◘◘◘83%◘◘◘83%◘◘◘83%◘◘◘83%◘◘◘83%◘◘◘83%◘◘◘84%◘◘◘84%◘◘◘84%◘◘◘84%◘◘◘84%◘◘◘84%◘◘◘84%◘◘◘84%◘◘◘84%◘◘◘85%◘◘◘85%◘◘◘85%◘◘◘85%◘◘◘85%◘◘◘85%◘◘◘85%◘◘◘85%◘◘◘85%◘◘◘86%◘◘◘86%◘◘◘86%◘◘◘86%◘◘◘86%◘◘◘86%◘◘◘86%◘◘◘86%◘◘◘86%◘◘◘87%◘◘◘87%◘◘◘87%◘◘◘87%◘◘◘87%◘◘◘87%◘◘◘87%◘◘◘87%◘◘◘87%◘◘◘88%◘◘◘88%◘◘◘88%◘◘◘88%◘◘◘88%◘◘◘88%◘◘◘88%◘◘◘88%◘◘◘88%◘◘◘89%◘◘◘89%◘◘◘89%◘◘◘89%◘◘◘89%◘◘◘89%◘◘◘89%◘◘◘89%◘◘◘90%◘◘◘90%◘◘◘90%◘◘◘90%◘◘◘90%◘◘◘90%◘◘◘90%◘◘◘90%◘◘◘90%◘◘◘91%◘◘◘91%◘◘◘91%◘◘◘91%◘◘◘91%◘◘◘91%◘◘◘91%◘◘◘91%◘◘◘91%◘◘◘92%◘◘◘92%◘◘◘92%◘◘◘92%◘◘◘92%◘◘◘92%◘◘◘92%◘◘◘92%◘◘◘92%◘◘◘93%◘◘◘93%◘◘◘93%◘◘◘93%◘◘◘93%◘◘◘93%◘◘◘93%◘◘◘93%◘◘◘93%◘◘◘94%◘◘◘94%◘◘◘94%◘◘◘94%◘◘◘94%◘◘◘94%◘◘◘94%◘◘◘94%◘◘◘94%◘◘◘95%◘◘◘95%◘◘◘95%◘◘◘95%◘◘◘95%◘◘◘95%◘◘◘95%◘◘◘95%◘◘◘95%◘◘◘96%◘◘◘96%◘◘◘96%◘◘◘96%◘◘◘96%◘◘◘96%◘◘◘96%◘◘◘96%◘◘◘96%◘◘◘97%◘◘◘97%◘◘◘97%◘◘◘97%◘◘◘97%◘◘◘97%◘◘◘97%◘◘◘97%◘◘◘97%◘◘◘98%◘◘◘98%◘◘◘98%◘◘◘98%◘◘◘98%◘◘◘98%◘◘◘98%◘◘◘98%◘◘◘98%◘◘◘99%◘◘◘99%◘◘◘99%◘◘◘99%◘◘◘99%◘◘◘99%◘◘◘99%◘◘◘99%◘◘◘99%◘◘◘100◘◘◘100◘◘◘100◘◘◘100
Complete
Running task: Task2
Table: A_OUTPUTVAT 0% ◘◘◘0% ◘◘◘0% ◘◘◘0% ◘◘◘0% ◘◘◘1% ◘◘◘1% ◘◘◘1% ◘◘◘1% ◘◘◘1% ◘◘◘1% ◘◘◘1% ◘◘◘1% ◘◘◘1% ◘◘◘2% ◘◘◘2% ◘◘◘2% ◘◘◘2% ◘◘◘2% ◘◘◘2% ◘◘◘2% ◘◘◘2% ◘◘◘2% ◘◘◘3% ◘◘◘3% ◘◘◘3% ◘◘◘3% ◘◘◘3% ◘◘◘3% ◘◘◘3% ◘◘◘3% ◘◘◘3% ◘◘◘4% ◘◘◘4% ◘◘◘4% ◘◘◘4% ◘◘◘4% ◘◘◘4% ◘◘◘4% ◘◘◘4% ◘◘◘5% ◘◘◘5% ◘◘◘5% ◘◘◘5% ◘◘◘5% ◘◘◘5% ◘◘◘5% ◘◘◘5% ◘◘◘5% ◘◘◘6% ◘◘◘6% ◘◘◘6% ◘◘◘6% ◘◘◘6% ◘◘◘6% ◘◘◘6% ◘◘◘6% ◘◘◘6% ◘◘◘7% ◘◘◘7% ◘◘◘7% ◘◘◘7% ◘◘◘7% ◘◘◘7% ◘◘◘7% ◘◘◘7% ◘◘◘7% ◘◘◘8% ◘◘◘8% ◘◘◘8% ◘◘◘8% ◘◘◘8% ◘◘◘8% ◘◘◘8% ◘◘◘8% ◘◘◘8% ◘◘◘9% ◘◘◘9% ◘◘◘9% ◘◘◘9% ◘◘◘9% ◘◘◘9% ◘◘◘9% ◘◘◘9% ◘◘◘9% ◘◘◘10%◘◘◘10%◘◘◘10%◘◘◘10%◘◘◘10%◘◘◘10%◘◘◘10%◘◘◘10%◘◘◘10%◘◘◘11%◘◘◘11%◘◘◘11%◘◘◘11%◘◘◘11%◘◘◘11%◘◘◘11%◘◘◘11%◘◘◘11%◘◘◘12%◘◘◘12%◘◘◘12%◘◘◘12%◘◘◘12%◘◘◘12%◘◘◘12%◘◘◘12%◘◘◘12%◘◘◘13%◘◘◘13%◘◘◘13%◘◘◘13%◘◘◘13%◘◘◘13%◘◘◘13%◘◘◘13%◘◘◘13%◘◘◘14%◘◘◘14%◘◘◘14%◘◘◘14%◘◘◘14%◘◘◘14%◘◘◘14%◘◘◘14%◘◘◘14%◘◘◘15%◘◘◘15%◘◘◘15%◘◘◘15%◘◘◘15%◘◘◘15%◘◘◘15%◘◘◘15%◘◘◘16%◘◘◘16%◘◘◘16%◘◘◘16%◘◘◘16%◘◘◘16%◘◘◘16%◘◘◘16%◘◘◘16%◘◘◘17%◘◘◘17%◘◘◘17%◘◘◘17%◘◘◘17%◘◘◘17%◘◘◘17%◘◘◘17%◘◘◘17%◘◘◘18%◘◘◘18%◘◘◘18%◘◘◘18%◘◘◘18%◘◘◘18%◘◘◘18%◘◘◘18%◘◘◘18%◘◘◘19%◘◘◘19%◘◘◘19%◘◘◘19%◘◘◘19%◘◘◘19%◘◘◘19%◘◘◘19%◘◘◘19%◘◘◘20%◘◘◘20%◘◘◘20%◘◘◘20%◘◘◘20%◘◘◘20%◘◘◘20%◘◘◘20%◘◘◘20%◘◘◘21%◘◘◘21%◘◘◘21%◘◘◘21%◘◘◘21%◘◘◘21%◘◘◘21%◘◘◘21%◘◘◘21%◘◘◘22%◘◘◘22%◘◘◘22%◘◘◘22%◘◘◘22%◘◘◘22%◘◘◘22%◘◘◘22%◘◘◘22%◘◘◘23%◘◘◘23%◘◘◘23%◘◘◘23%◘◘◘23%◘◘◘23%◘◘◘23%◘◘◘23%◘◘◘23%◘◘◘24%◘◘◘24%◘◘◘24%◘◘◘24%◘◘◘24%◘◘◘24%◘◘◘24%◘◘◘24%◘◘◘24%◘◘◘25%◘◘◘25%◘◘◘25%◘◘◘25%◘◘◘25%◘◘◘25%◘◘◘25%◘◘◘25%◘◘◘25%◘◘◘26%◘◘◘26%◘◘◘26%◘◘◘26%◘◘◘26%◘◘◘26%◘◘◘26%◘◘◘26%◘◘◘27%◘◘◘27%◘◘◘27%◘◘◘27%◘◘◘27%◘◘◘27%◘◘◘27%◘◘◘27%◘◘◘27%◘◘◘28%◘◘◘28%◘◘◘28%◘◘◘28%◘◘◘28%◘◘◘28%◘◘◘28%◘◘◘28%◘◘◘28%◘◘◘29%◘◘◘29%◘◘◘29%◘◘◘29%◘◘◘29%◘◘◘29%◘◘◘29%◘◘◘29%◘◘◘29%◘◘◘30%◘◘◘30%◘◘◘30%◘◘◘30%◘◘◘30%◘◘◘30%◘◘◘30%◘◘◘30%◘◘◘30%◘◘◘31%◘◘◘31%◘◘◘31%◘◘◘31%◘◘◘31%◘◘◘31%◘◘◘31%◘◘◘31%◘◘◘31%◘◘◘32%◘◘◘32%◘◘◘32%◘◘◘32%◘◘◘32%◘◘◘32%◘◘◘32%◘◘◘32%◘◘◘32%◘◘◘33%◘◘◘33%◘◘◘33%◘◘◘33%◘◘◘33%◘◘◘33%◘◘◘33%◘◘◘33%◘◘◘33%◘◘◘34%◘◘◘34%◘◘◘34%◘◘◘34%◘◘◘34%◘◘◘34%◘◘◘34%◘◘◘34%◘◘◘34%◘◘◘35%◘◘◘35%◘◘◘35%◘◘◘35%◘◘◘35%◘◘◘35%◘◘◘35%◘◘◘35%◘◘◘35%◘◘◘36%◘◘◘36%◘◘◘36%◘◘◘36%◘◘◘36%◘◘◘36%◘◘◘36%◘◘◘36%◘◘◘36%◘◘◘37%◘◘◘37%◘◘◘37%◘◘◘37%◘◘◘37%◘◘◘37%◘◘◘37%◘◘◘37%◘◘◘38%◘◘◘38%◘◘◘38%◘◘◘38%◘◘◘38%◘◘◘38%◘◘◘38%◘◘◘38%◘◘◘38%◘◘◘39%◘◘◘39%◘◘◘39%◘◘◘39%◘◘◘39%◘◘◘39%◘◘◘39%◘◘◘39%◘◘◘39%◘◘◘40%◘◘◘40%◘◘◘40%◘◘◘40%◘◘◘40%◘◘◘40%◘◘◘40%◘◘◘40%◘◘◘40%◘◘◘41%◘◘◘41%◘◘◘41%◘◘◘41%◘◘◘41%◘◘◘41%◘◘◘41%◘◘◘41%◘◘◘41%◘◘◘42%◘◘◘42%◘◘◘42%◘◘◘42%◘◘◘42%◘◘◘42%◘◘◘42%◘◘◘42%◘◘◘42%◘◘◘43%◘◘◘43%◘◘◘43%◘◘◘43%◘◘◘43%◘◘◘43%◘◘◘43%◘◘◘43%◘◘◘43%◘◘◘44%◘◘◘44%◘◘◘44%◘◘◘44%◘◘◘44%◘◘◘44%◘◘◘44%◘◘◘44%◘◘◘44%◘◘◘45%◘◘◘45%◘◘◘45%◘◘◘45%◘◘◘45%◘◘◘45%◘◘◘45%◘◘◘45%◘◘◘45%◘◘◘46%◘◘◘46%◘◘◘46%◘◘◘46%◘◘◘46%◘◘◘46%◘◘◘46%◘◘◘46%◘◘◘46%◘◘◘47%◘◘◘47%◘◘◘47%◘◘◘47%◘◘◘47%◘◘◘47%◘◘◘47%◘◘◘47%◘◘◘47%◘◘◘48%◘◘◘48%◘◘◘48%◘◘◘48%◘◘◘48%◘◘◘48%◘◘◘48%◘◘◘48%◘◘◘49%◘◘◘49%◘◘◘49%◘◘◘49%◘◘◘49%◘◘◘49%◘◘◘49%◘◘◘49%◘◘◘49%◘◘◘50%◘◘◘50%◘◘◘50%◘◘◘50%◘◘◘50%◘◘◘50%◘◘◘50%◘◘◘50%◘◘◘50%◘◘◘51%◘◘◘51%◘◘◘51%◘◘◘51%◘◘◘51%◘◘◘51%◘◘◘51%◘◘◘51%◘◘◘51%◘◘◘52%◘◘◘52%◘◘◘52%◘◘◘52%◘◘◘52%◘◘◘52%◘◘◘52%◘◘◘52%◘◘◘52%◘◘◘53%◘◘◘53%◘◘◘53%◘◘◘53%◘◘◘53%◘◘◘53%◘◘◘53%◘◘◘53%◘◘◘53%◘◘◘54%◘◘◘54%◘◘◘54%◘◘◘54%◘◘◘54%◘◘◘54%◘◘◘54%◘◘◘54%◘◘◘54%◘◘◘55%◘◘◘55%◘◘◘55%◘◘◘55%◘◘◘55%◘◘◘55%◘◘◘55%◘◘◘55%◘◘◘55%◘◘◘56%◘◘◘56%◘◘◘56%◘◘◘56%◘◘◘56%◘◘◘56%◘◘◘56%◘◘◘56%◘◘◘56%◘◘◘57%◘◘◘57%◘◘◘57%◘◘◘57%◘◘◘57%◘◘◘57%◘◘◘57%◘◘◘57%◘◘◘57%◘◘◘58%◘◘◘58%◘◘◘58%◘◘◘58%◘◘◘58%◘◘◘58%◘◘◘58%◘◘◘58%◘◘◘58%◘◘◘59%◘◘◘59%◘◘◘59%◘◘◘59%◘◘◘59%◘◘◘59%◘◘◘59%◘◘◘59%◘◘◘60%◘◘◘60%◘◘◘60%◘◘◘60%◘◘◘60%◘◘◘60%◘◘◘60%◘◘◘60%◘◘◘60%◘◘◘61%◘◘◘61%◘◘◘61%◘◘◘61%◘◘◘61%◘◘◘61%◘◘◘61%◘◘◘61%◘◘◘61%◘◘◘62%◘◘◘62%◘◘◘62%◘◘◘62%◘◘◘62%◘◘◘62%◘◘◘62%◘◘◘62%◘◘◘62%◘◘◘63%◘◘◘63%◘◘◘63%◘◘◘63%◘◘◘63%◘◘◘63%◘◘◘63%◘◘◘63%◘◘◘63%◘◘◘64%◘◘◘64%◘◘◘64%◘◘◘64%◘◘◘64%◘◘◘64%◘◘◘64%◘◘◘64%◘◘◘64%◘◘◘65%◘◘◘65%◘◘◘65%◘◘◘65%◘◘◘65%◘◘◘65%◘◘◘65%◘◘◘65%◘◘◘65%◘◘◘66%◘◘◘66%◘◘◘66%◘◘◘66%◘◘◘66%◘◘◘66%◘◘◘66%◘◘◘66%◘◘◘66%◘◘◘67%◘◘◘67%◘◘◘67%◘◘◘67%◘◘◘67%◘◘◘67%◘◘◘67%◘◘◘67%◘◘◘67%◘◘◘68%◘◘◘68%◘◘◘68%◘◘◘68%◘◘◘68%◘◘◘68%◘◘◘68%◘◘◘68%◘◘◘68%◘◘◘69%◘◘◘69%◘◘◘69%◘◘◘69%◘◘◘69%◘◘◘69%◘◘◘69%◘◘◘69%◘◘◘69%◘◘◘70%◘◘◘70%◘◘◘70%◘◘◘70%◘◘◘70%◘◘◘70%◘◘◘70%◘◘◘70%◘◘◘71%◘◘◘71%◘◘◘71%◘◘◘71%◘◘◘71%◘◘◘71%◘◘◘71%◘◘◘71%◘◘◘71%◘◘◘72%◘◘◘72%◘◘◘72%◘◘◘72%◘◘◘72%◘◘◘72%◘◘◘72%◘◘◘72%◘◘◘72%◘◘◘73%◘◘◘73%◘◘◘73%◘◘◘73%◘◘◘73%◘◘◘73%◘◘◘73%◘◘◘73%◘◘◘73%◘◘◘74%◘◘◘74%◘◘◘74%◘◘◘74%◘◘◘74%◘◘◘74%◘◘◘74%◘◘◘74%◘◘◘74%◘◘◘75%◘◘◘75%◘◘◘75%◘◘◘75%◘◘◘75%◘◘◘75%◘◘◘75%◘◘◘75%◘◘◘75%◘◘◘76%◘◘◘76%◘◘◘76%◘◘◘76%◘◘◘76%◘◘◘76%◘◘◘76%◘◘◘76%◘◘◘76%◘◘◘77%◘◘◘77%◘◘◘77%◘◘◘77%◘◘◘77%◘◘◘77%◘◘◘77%◘◘◘77%◘◘◘77%◘◘◘78%◘◘◘78%◘◘◘78%◘◘◘78%◘◘◘78%◘◘◘78%◘◘◘78%◘◘◘78%◘◘◘78%◘◘◘79%◘◘◘79%◘◘◘79%◘◘◘79%◘◘◘79%◘◘◘79%◘◘◘79%◘◘◘79%◘◘◘79%◘◘◘80%◘◘◘80%◘◘◘80%◘◘◘80%◘◘◘80%◘◘◘80%◘◘◘80%◘◘◘80%◘◘◘80%◘◘◘81%◘◘◘81%◘◘◘81%◘◘◘81%◘◘◘81%◘◘◘81%◘◘◘81%◘◘◘81%◘◘◘82%◘◘◘82%◘◘◘82%◘◘◘82%◘◘◘82%◘◘◘82%◘◘◘82%◘◘◘82%◘◘◘82%◘◘◘83%◘◘◘83%◘◘◘83%◘◘◘83%◘◘◘83%◘◘◘83%◘◘◘83%◘◘◘83%◘◘◘83%◘◘◘84%◘◘◘84%◘◘◘84%◘◘◘84%◘◘◘84%◘◘◘84%◘◘◘84%◘◘◘84%◘◘◘84%◘◘◘85%◘◘◘85%◘◘◘85%◘◘◘85%◘◘◘85%◘◘◘85%◘◘◘85%◘◘◘85%◘◘◘85%◘◘◘86%◘◘◘86%◘◘◘86%◘◘◘86%◘◘◘86%◘◘◘86%◘◘◘86%◘◘◘86%◘◘◘86%◘◘◘87%◘◘◘87%◘◘◘87%◘◘◘87%◘◘◘87%◘◘◘87%◘◘◘87%◘◘◘87%◘◘◘87%◘◘◘88%◘◘◘88%◘◘◘88%◘◘◘88%◘◘◘88%◘◘◘88%◘◘◘88%◘◘◘88%◘◘◘88%◘◘◘89%◘◘◘89%◘◘◘89%◘◘◘89%◘◘◘89%◘◘◘89%◘◘◘89%◘◘◘89%◘◘◘89%◘◘◘90%◘◘◘90%◘◘◘90%◘◘◘90%◘◘◘90%◘◘◘90%◘◘◘90%◘◘◘90%◘◘◘90%◘◘◘91%◘◘◘91%◘◘◘91%◘◘◘91%◘◘◘91%◘◘◘91%◘◘◘91%◘◘◘91%◘◘◘91%◘◘◘92%◘◘◘92%◘◘◘92%◘◘◘92%◘◘◘92%◘◘◘92%◘◘◘92%◘◘◘92%◘◘◘93%◘◘◘93%◘◘◘93%◘◘◘93%◘◘◘93%◘◘◘93%◘◘◘93%◘◘◘93%◘◘◘93%◘◘◘94%◘◘◘94%◘◘◘94%◘◘◘94%◘◘◘94%◘◘◘94%◘◘◘94%◘◘◘94%◘◘◘94%◘◘◘95%◘◘◘95%◘◘◘95%◘◘◘95%◘◘◘95%◘◘◘95%◘◘◘95%◘◘◘95%◘◘◘95%◘◘◘96%◘◘◘96%◘◘◘96%◘◘◘96%◘◘◘96%◘◘◘96%◘◘◘96%◘◘◘96%◘◘◘96%◘◘◘97%◘◘◘97%◘◘◘97%◘◘◘97%◘◘◘97%◘◘◘97%◘◘◘97%◘◘◘97%◘◘◘97%◘◘◘98%◘◘◘98%◘◘◘98%◘◘◘98%◘◘◘98%◘◘◘98%◘◘◘98%◘◘◘98%◘◘◘98%◘◘◘99%◘◘◘99%◘◘◘99%◘◘◘99%◘◘◘99%◘◘◘99%◘◘◘99%◘◘◘99%◘◘◘99%◘◘◘100◘◘◘100◘◘◘100◘◘◘100
Complete
Running task: Task3
Table: Customer
Complete
我希望获得实时渐进百分比,例如我在CMD.exe中运行时得到的内容。
Running task: Task1
Table: Task1 100 //progress % shown here
Complete
Running task: Task2
Table: Task2 100 //progress % shown here
Complete
Running task: Task3
Table: Task2 100 //progress % shown here
Complete
我的目的是从CMD.exe实时捕获进度%并将其作为进度条或其他内容嵌入到MyApp中,这样我就可以触发完成并允许用户继续。
我只是希望有人能帮我从CMD.exe中实时捕获进度吗?
答案 0 :(得分:2)
几年前,当我试图获取DOS命令的输出时,我遇到了这个片段。也许它可以帮助你解决手头的问题。您可以调用此过程,并且将执行您传递的任何命令。 我已经测试了它传递了超过1个命令(由&加入)并且它完美地工作。例如:
ExecuteDOSCommand('getmac & ipconfig & vol', Output);
这是执行DOS命令的另一种方法。我知道,代码很长,有点难以理解,但它也可能对你有帮助。试一试吧。您不需要更改任何内容,只需使用您自己的参数调用该过程即可。 这是片段:
procedure TForm1.ExecuteDOSCommand(Command: String; Output: TStrings; TimeOut: Int64 = 0);
var
ProcessStartupInfo: STARTUPINFO;
SecurityAttributes: SECURITY_ATTRIBUTES;
SecurityDescriptor: SECURITY_DESCRIPTOR;
ProcessInformation: PROCESS_INFORMATION;
PipeReadHandle, PipeWriteHandle: THandle;
BytesRead, ExitCode: Cardinal;
Buffer, UnicodeOutput: array[0..4095] of Char;
NormalizedStr, FullOutputStr: String;
EndingWaitTime: TDateTime;
function IsWinNT: Boolean;
var
OSVerInfo: OSVERSIONINFO;
begin
OSVerInfo.dwOSVersionInfoSize := SizeOf(OSVerInfo);
GetVersionEx(OSVerInfo);
Result := OSVerInfo.dwPlatformId = VER_PLATFORM_WIN32_NT;
end;
begin
Output.Clear;
if IsWinNT then
begin
InitializeSecurityDescriptor(@SecurityDescriptor, SECURITY_DESCRIPTOR_REVISION);
SetSecurityDescriptorDacl(@SecurityDescriptor, True, nil, False);
SecurityAttributes.lpSecurityDescriptor := @SecurityDescriptor;
end
else
SecurityAttributes.lpSecurityDescriptor := nil;
SecurityAttributes.nLength := SizeOf(SECURITY_ATTRIBUTES);
SecurityAttributes.bInheritHandle := True;
if CreatePipe(PipeReadHandle, PipeWriteHandle, @SecurityAttributes, 0) then
try
GetStartupInfo(ProcessStartupInfo);
with ProcessStartupInfo do
begin
dwFlags := STARTF_USESTDHANDLES or STARTF_USESHOWWINDOW;
wShowWindow := SW_HIDE;
hStdInput := PipeReadHandle;
hStdOutput := PipeWriteHandle;
hStdError := PipeWriteHandle;
end;
Fillchar(Buffer, SizeOf(Buffer), #0);
GetEnvironmentVariable('ComSpec', @Buffer, SizeOf(Buffer));
StrCat(@Buffer, PChar(' /c ' + Command));
if CreateProcess(nil, @Buffer, nil, nil, True, CREATE_NEW_CONSOLE, nil, nil, ProcessStartupInfo, ProcessInformation) then
begin
CloseHandle(ProcessInformation.hThread);
EndingWaitTime := IncMilliSecond(Now, TimeOut);
repeat
PeekNamedPipe(PipeReadHandle, @Buffer, SizeOf(Buffer), @BytesRead, nil, nil);
if BytesRead > 0 then
begin
Fillchar(Buffer, SizeOf(Buffer), #0);
ReadFile(PipeReadHandle, Buffer, BytesRead, BytesRead, nil);
FillChar(UnicodeOutput, SizeOf(UnicodeOutput), #0);
OemToChar(@Buffer, UnicodeOutput);
NormalizedStr := StringReplace(UnicodeOutput, '♪', #13, [rfReplaceAll]);
NormalizedStr := StringReplace(NormalizedStr, '◙', #10, [rfReplaceAll]);
FullOutputStr := FullOutputStr + NormalizedStr;
end;
GetExitCodeProcess(ProcessInformation.hProcess, ExitCode);
until ((ExitCode <> STILL_ACTIVE) and (BytesRead = 0)) or ((TimeOut > 0) and (EndingWaitTime < Now));
CloseHandle(ProcessInformation.hProcess);
Output.Text := FullOutputStr;
end;
finally
CloseHandle(PipeReadHandle);
CloseHandle(PipeWriteHandle);
end;
end;
假设您的表单上有一个名为Button1的按钮和一个名为Memo1的备忘录,您可以为Button1的OnClick事件编写此事件处理程序。这是一个如何使用此过程的实用示例代码:
procedure TForm1.Button1Click(Sender: TObject);
var
Output: TStrings;
begin
Output := TStringList.Create;
try
ExecuteDOSCommand('getmac & ipconfig & vol', Output);
Memo1.Lines := Output;
finally
Output.Free;
end;
end;
顺便说一句,这是我当前例子的“uses”子句:
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, Vcl.ComCtrls, DateUtils;
请注意我在“uses”子句中包含DateUtils单元的方式。这对于代码段中的特定函数调用是必需的(IncMilliSecond(Now,TimeOut);)。其余的“用途”根据您的需要而有所不同。