Oberon space
General Category => Общий раздел => Тема начата: DIzer от Март 27, 2012, 09:03:02 am
-
Как то странно работает CreateProcess при попытке запустить консольное приложение (похоже я торможу)
не запускается с
lpCommandLine="exname < infile > outfile"
но запускается с
lpCommandLine="cmd /c exname < infile > outfile"
так же запускается
lpCommandLine="exname"
Кто нибудь может сказать, в чем причина..
-
то есть меня интересует следующий вопрос - может ли причиной быть консольный экзешник
-
У меня следующая функция работает. Путь к файлу нужно передавать полный (пропустив через SysUtils.ExpandFileName).
FUNCTION RunProcess (CONST ExeFilePath, ExeArgs, ExeCurrentDir: STRING; WaitEnd: BOOLEAN): BOOLEAN;
CONST
DEFAULT_PROCESS_ATTRIBUTES = NIL;
DEFAULT_THREAD_ATTRIBUTES = NIL;
INHERIT_HANDLES = TRUE;
NO_CREATION_FLAGS = 0;
INHERIT_ENVIROMENT = NIL;
VAR
StartupInfo: Windows.TStartupInfo;
ProcessInfo: Windows.TProcessInformation;
BEGIN
FillChar(StartupInfo, SIZEOF(StartupInfo), #0);
StartupInfo.cb := SIZEOF(StartupInfo);
RESULT := Windows.CreateProcess
(
NIL,
PCHAR('"' + ExeFilePath + '" ' + ExeArgs),
DEFAULT_PROCESS_ATTRIBUTES,
DEFAULT_THREAD_ATTRIBUTES,
NOT INHERIT_HANDLES,
NO_CREATION_FLAGS,
INHERIT_ENVIROMENT,
POINTER(ExeCurrentDir),
StartupInfo,
ProcessInfo
);
IF RESULT THEN BEGIN
IF WaitEnd THEN BEGIN
Windows.WaitForSingleObject(ProcessInfo.hProcess, Windows.INFINITE);
END; // .IF
END; // .IF
END; // .FUNCTION RunProcess
-
Как то странно работает CreateProcess при попытке запустить консольное приложение (похоже я торможу)
не запускается с
lpCommandLine="exname < infile > outfile"
но запускается с
lpCommandLine="cmd /c exname < infile > outfile"
так же запускается
lpCommandLine="exname"
Кто нибудь может сказать, в чем причина..
Думаю, проблема возникла из-за перенаправления ввода/вывода. При запуске эти операции, видимо, трактуются как аргументы программы, чем они вовсе не являются.
Во втором случае они являются частью аргументов для команды cmd, поэтому прокатывают...
-
то есть меня интересует следующий вопрос - может ли причиной быть консольный экзешник
Перенаправление ввода/вывода - функциональность cmd.exe. Если хочешь без него - организовывай это перенаправление сам, у CreateProcess есть соответствующие хэндлы stdin/stdout.
-
Geniepro и Vlad -думаю вы правы...решение удовлетворяющее (cmd) было найдено.. но кому охота иметь бомбу замедленного действия, короче СПАСИБО (просто я изначально пренебрегал подготовкой в системных вещах...) ну а ответы на такого рода вопросы не сыщешь в описании функции CreateProcess и без разницы какова твоя степень владения английским :( ...
-
... Vlad , насчет трубок... особого смысла пока не вижу использовать эту технику но это, как говорится.. вопрос задачи (или ее восприятия)....
-
2 Berserker Спасибо ... именно в таком духе я и действовал...но получилось, то что получилось :)