Получить код завершения из командного файла в Inno Setup с помощью ShellExecuteEx
У меня есть несколько командных файлов, которые я выполняю из Inno Setup. я использую ShellExecuteEx()
выполнить командные файлы:
function ShellExecuteWait(const Verb, Filename, Params, WorkingDir: string; const ShowCmd: integer; const Timeout: cardinal; var ExitCode: DWORD): boolean;
var
ExecInfo: TShellExecuteInfo;
begin
Result := false;
ExecInfo.cbSize := SizeOf(ExecInfo);
ExecInfo.fMask := SEE_MASK_NOCLOSEPROCESS;
ExecInfo.Wnd := 0;
ExecInfo.lpVerb := Verb;
ExecInfo.lpFile := Filename;
ExecInfo.lpParameters := Params;
ExecInfo.lpDirectory := WorkingDir;
ExecInfo.nShow := ShowCmd;
if ShellExecuteEx(ExecInfo) then
begin
if WaitForSingleObject(ExecInfo.hProcess, Timeout) = WAIT_TIMEOUT then
begin
TerminateProcess(ExecInfo.hProcess, WAIT_TIMEOUT);
end else begin
end;
GetExitCodeProcess(ExecInfo.hProcess, ExitCode);
Result := (ExitCode = ERROR_SUCCESS);
end else begin
ExitCode := GetLastError();
end;
end;
if (not ShellExecuteWait('',
Command,
Params,
ExpandConstant('{tmp}'),
SW_SHOW,
Timeout,
ResultCode)) then...
Но независимо от того, что я пытаюсь, я не могу получить код выхода из командного файла в ResultCode
(Я всегда возвращаюсь 0).
Исследуя эту проблему, я прочитал, что партия НЕ должна использовать exit /b NN
, Поэтому я удалил /b
переключатель, но я все еще всегда получаю 0.
Что я должен сделать, чтобы успешно получить код выхода из командного файла?
Деннис
1 ответ
Я нашел проблему. Команда для вызова командного файла включает в себя канал через другую программу, поэтому код результата, который я получаю, на самом деле приходит из программы, через которую выводится сценарий.