Здравствуйте!
У меня есть консольное приложение, написанное на C#, закидывающее некий файл на GoogleDrive. Это приложение нужно запустить из приложения Delphi, но при этом дождаться окончания загрузки (то есть, ничего не делать, пока консольное приложение работает). Через ShellExecute всё работает замечательно, но приложение не дожидается окончания работы консоли. Я использую следующую функцию:
Код:
function WinExecAndWait(Filename, params, dir: string):cardinal;
var
WorkDir, programName:string;
StartupInfo:TStartupInfo;
ProcessInfo:TProcessInformation;
begin
GetDir(0,WorkDir);
programName:=WorkDir+'\'+dir+'\'+FileName;
FillChar(StartupInfo,Sizeof(StartupInfo),#0);
StartupInfo.cb:= Sizeof(StartupInfo);
StartupInfo.dwFlags:= STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow:= SW_SHOW;
if not CreateProcess(PChar(ProgramName),
PChar(params),
nil,
nil,
false,
CREATE_NEW_CONSOLE or
NORMAL_PRIORITY_CLASS,
nil,
nil,
StartupInfo,
ProcessInfo) then result := 0
else begin
WaitforSingleObject(ProcessInfo.hProcess, INFINITE);
GetExitCodeProcess(ProcessInfo.hProcess, result);
end;
end;
Функция полностью работает, если нужно запустить тестовое приложение (тестовое приложение выводит в консоль строки, которые были в параметре), однако моргнет и сразу выключается, если запускается целевое консольное приложение.
Код консольного приложения такой:
Код:
internal class Program
{
static async Task Main(string[] args)
{
var gu = GoogleUploader.Upload(args[0], args[1], args[2]);
await gu;
}
}
В чем может быть дело? Почему shellExecute отрабатывает, а описанная выше отрабатывает только тестовые? Весь день уже убил.