Получить код завершения из командного файла в 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 ответ

Я нашел проблему. Команда для вызова командного файла включает в себя канал через другую программу, поэтому код результата, который я получаю, на самом деле приходит из программы, через которую выводится сценарий.

Другие вопросы по тегам