Сведения о вопросе

ЧОВИД

22:37, 18th August, 2020

Теги

Windows    

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

Просмотров: 332   Ответов: 6

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

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


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


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

В чем ошибка? Как можно сделать лучше?



  Сведения об ответе

screen

07:08, 29th August, 2020

Перенаправление ввода-вывода это НЕ параметры командной строки.
Попробуйте поэкспериментировать с CreateProcess, параметр lpStartupInfo может быть полезным.


  Сведения об ответе

ITSME

17:53, 26th August, 2020

Попробуйте так:
ShellExecute(handle, 'open', 'cmd.exe', '/C program.exe > err.txt', nil, SW_SHOW);


  Сведения об ответе

qwerty101

05:54, 29th August, 2020

Именно так, как сказал предыдущий оратор.
Открываете файл через CreateFile с параметром SECURITY_ATTRIBUTES.bInheritHandle = TRUE и делаете CreateProcess с bInheritHandles = TRUE и lpStartupInfo.dwFlags |= STARTF_USESTDHANDLES, lpStartupInfo.hStdError = hFile.


  Сведения об ответе

PROGA

03:39, 4th August, 2020

> ShellExecute(handle, 'program.exe', '-2>err.txt', nil, SW_SHOW);
Не хватает ещё одного аргумента между handle и 'program.exe'.

Может вместо ShellExecute использовать WinExec?


  Сведения об ответе

FAriza

14:37, 4th August, 2020

Вот тут уже с таким вопросом боролись: http://www.wasm.ru/forum/viewtopic.php?id=8962


  Сведения об ответе

#hash

17:11, 24th August, 2020

Всем спасибо за советы. Сначала сделал костыль: написал командный файл с нужными параметрами и уже его вызывал через ShellExecute. Потом прописал через CreateProcess, все получилось. Всем спасибо, всем плюс :)


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться