В режиме запуска консольного процесса не работают:
1) точка с данными об ID процесса
2) выбор режима отображения консольного окна
Прошу внести, предлагаемые мной, изменения в процедуру THIWinExec._work_doConsoleExec в файле hiWinExec.pas, которые устраняют замеченные недостатки. Предлагаемые изменения в процедуре выделяю красным:
procedure THIWinExec._work_doConsoleExec;
var
sa: TSECURITYATTRIBUTES;
si: TSTARTUPINFO;
pi: TPROCESSINFORMATION;
Res: Boolean;
CommandLine:string;
FN,params:string;
begin
Fn := ReadString(_Data,_data_FileName,_prop_FileName);
Params := ReadString(_Data,_data_Params,_prop_Param);
CommandLine := Fn + ' ' + Params;
Terminate;
sa.nLength := sizeof(sa);
sa.bInheritHandle := true;
sa.lpSecurityDescriptor := nil;
CreatePipe(hPipeInputRead, hPipeInputWrite, @sa, 0);
CreatePipe(hPipeOutputRead, hPipeOutputWrite, @sa, 0);
CreatePipe(hPipeErrorsRead, hPipeErrorsWrite, @sa, 0);
ZeroMemory(@si, SizeOf(si));
ZeroMemory(@pi, SizeOf(pi));
si.cb := SizeOf(si);
si.dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
[s]si.wShowWindow := SW_HIDE;[/s]// удалить
//заменить на
[color=#CC3300][b]si.wShowWindow := _prop_Mode;[/b][/color]// обеспечивает заданный пользователем
//режим отображения окна консоли
si.hStdInput := hPipeInputRead;
si.hStdOutput := hPipeOutputWrite;
si.hStdError := hPipeErrorsWrite;
Res := CreateProcess(nil, PChar(CommandLine), nil, nil, true,
CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, si, pi);
// Procedure will exit if CreateProcess fail
if not Res then
begin
CloseHandle(hPipeInputRead);
CloseHandle(hPipeOutputWrite);
CloseHandle(hPipeErrorsWrite);
CloseHandle(hPipeInputWrite);
CloseHandle(hPipeOutputRead);
CloseHandle(hPipeErrorsRead);
hProcess := 0;
Exit;
end;
hProcess := pi.hProcess; FRead := true;
[color=#CC3300][b]FProcessID := pi.dwProcessId; [/b][/color]
// добавить. Исправляет отсутствие данных об ID процесса
hReadThread := CreateThread(nil,1024,@ReadFunc,Self,0,dwReadThreadID);
_hi_onEvent(_event_onExec);
end;
Изменения элементарные, но обеспечивают нормальное функционирование компонента.
Редактировалось 1 раз(а), последний 2017-12-28 22:42:21