powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / факультативный вопрос по запуску файла с перенаправлением
2 сообщений из 2, страница 1 из 1
факультативный вопрос по запуску файла с перенаправлением
    #39917197
yemets63
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
имеем стандартный код ShellExecuteEx для запуска чего нибудь

если запусть любую программу, даже консоли в текстовом режиме (DOS) всё работает
но надо выполнить с перенаправлением
КОМАНДА_WINDOWS ПАРАМЕТРЫ >ПУТЬ_И_ФАЙЛ_ВЫВОДА_РЕЗУЛЬТАТА_КОМАНДЫ_WINDOWS

если использовать скрипт CMD, то ФАЙЛ СОЗДАН после выполнения команды Windows, но при этом ExitCode <>0, т.е. была ошибка от Windows
если скрипт CMD не использовать, то файл НЕ БУДЕТ СОЗДАН после выполнения команды Windows, ExitCode <>0, т.е. ошибка от Windows

GetExitCodeProcess возвращает или 0, ошибки нет, или 1, ошибка есть. перелопатил все Логи Windows, не нашел где, а соответственно что за ошибка.

Windows.GetExitCodeProcess(ExecInfo.hProcess, ExitCode);

как поймать ошибку, или как запустить из Delphi без CMD Скрипта запуск команды Windows с параметрами и перенаправлением в какую нибудь папку сохранения файла.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
function __ShellExecuteEx(Filename, Parameters: String; ShowCmd: Integer; _Wait: Boolean; _ShowMessageOnError: Boolean; out mExitCode: DWORD; out mLastOSError: DWORD): Boolean;
var
  ExecInfo: SHELLEXECUTEINFOW;
  FilenamePart, PathPart: String;
  WaitResult: DWORD;
  ExitCode: Cardinal;
  OldWOW64: Pointer;
begin
  mExitCode  := 0;
  mLastOSError := 0;

  PathPart := System.IOUtils.TPath.GetDirectoryName(Filename);
  FilenamePart := IOUtils.TPath.GetFileName(Filename);

  try
    ExecInfo.cbSize       := sizeof(SHELLEXECUTEINFOW);
    ExecInfo.fMask        := SEE_MASK_NOCLOSEPROCESS + SEE_MASK_NOZONECHECKS;
    if not _ShowMessageOnError then
      ExecInfo.fMask := ExecInfo.fMask + SEE_MASK_FLAG_NO_UI;
    ExecInfo.lpVerb       := PChar('OPEN');
    ExecInfo.lpFile       := PChar(FilenamePart);
    ExecInfo.lpParameters := PChar(Parameters);
    ExecInfo.lpDirectory  := PChar(PathPart);
    ExecInfo.nShow        := ShowCmd;

    result := ShellAPI.ShellExecuteEx(@ExecInfo);
    if result then begin
      try
        if _Wait then begin
        WaitResult := Windows.WaitForSingleObject(ExecInfo.hProcess, INFINITE);
        if WaitResult <> Windows.WAIT_OBJECT_0 then begin
          Windows.TerminateProcess(ExecInfo.hProcess, 0)
        end else begin
          Windows.GetExitCodeProcess(ExecInfo.hProcess, ExitCode);
          mExitCode := ExitCode;
        end;
      end;
      finally
        Windows.CloseHandle(ExecInfo.hProcess);
      end;
    end else
      mLastOSError := GetLastError();
  finally
  end;
end;



CreateProcess тоже пробовал, результат примерно такой же
каталоги все на месте, и доступ к ним открыт
...
Рейтинг: 0 / 0
факультативный вопрос по запуску файла с перенаправлением
    #39917218
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Перенаправление - это фишка cmd, и вроде бы чисто внутренняя, т.е. через параметр ее применить не получится. С кодом ошибки, конечно, странно. Обычно нет смысла возиться с ShellExecute, и CreateProcess с чтением STDOUT решает все проблемы
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / факультативный вопрос по запуску файла с перенаправлением
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]