WinAPI: ShellExecute. Передача параметров запуска приложению?

Добрый вечер (утро/день/ночь). Пишу программу, использую WinAPI. В частности — функцию ShellExecute. Эта программа вызывает консольное приложение, передает ему параметры (вывод STDERR потока в текстовый файл).

В командной строке пишу так:
program.exe -2>err.txt


В коде программы пишу так:
ShellExecute(handle, 'open', 'program.exe', '-2>err.txt', nil, SW_SHOW);


Без параметров ('-2>err.txt') программа запускается, ошибки выводит в консоль. А с параметрами тоже выдает в консоль, хотя нужно в файл.

В чем ошибка? Как можно сделать лучше?
  • Вопрос задан
  • 13950 просмотров
Пригласить эксперта
Ответы на вопрос 6
@al_one
Перенаправление ввода-вывода это НЕ параметры командной строки.
Попробуйте поэкспериментировать с CreateProcess, параметр lpStartupInfo может быть полезным.
Ответ написан
Комментировать
Demon2
@Demon2
Попробуйте так:
ShellExecute(handle, 'open', 'cmd.exe', '/C program.exe > err.txt', nil, SW_SHOW);
Ответ написан
@yeputons
Именно так, как сказал предыдущий оратор.
Открываете файл через CreateFile с параметром SECURITY_ATTRIBUTES.bInheritHandle = TRUE и делаете CreateProcess с bInheritHandles = TRUE и lpStartupInfo.dwFlags |= STARTF_USESTDHANDLES, lpStartupInfo.hStdError = hFile.
Ответ написан
Комментировать
@yopopt
> ShellExecute(handle, 'program.exe', '-2>err.txt', nil, SW_SHOW);
Не хватает ещё одного аргумента между handle и 'program.exe'.

Может вместо ShellExecute использовать WinExec?
Ответ написан
xRay
@xRay
Вот тут уже с таким вопросом боролись: http://www.wasm.ru/forum/viewtopic.php?id=8962
Ответ написан
Комментировать
@agul Автор вопроса
Всем спасибо за советы. Сначала сделал костыль: написал командный файл с нужными параметрами и уже его вызывал через ShellExecute. Потом прописал через CreateProcess, все получилось. Всем спасибо, всем плюс :)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы