|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#16
|
|||
|
|||
Я бы посоветовал сделать так
Код:
function WinExecAndWait(Filename, params, dir: WideString):cardinal; var programPath: WideString; StartupInfo: TStartupInfo; ProcessInfo: TProcessInformation; begin programPath := GetCurrentDir; if (Length(dir) > 0) and (dir[1] = '\') then ProgramPath := ExtractFileDrive(programPath) + dir else if (Length > 1) and (dir[2] = ':') then programPath := dir else programPath := programPath + '\' + dir; FillChar(StartupInfo,Sizeof(StartupInfo),#0); StartupInfo.cb:= Sizeof(StartupInfo); StartupInfo.dwFlags:= STARTF_USESHOWWINDOW; StartupInfo.wShowWindow:= SW_SHOW; if not CreateProcessW(nil, PWideChar(ProgramPath + '\' + FileName + ' ' + params), nil, nil, false, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, PWideChar(ProgramPath), nil, StartupInfo, ProcessInfo) then result := -1 // при ошибке лучше вернуть отрицательное значение else begin WaitforSingleObject(ProcessInfo.hProcess, INFINITE); GetExitCodeProcess(ProcessInfo.hProcess, result); end; end; 2) Дополнительно стоит использовать явно функцию с суффиксом кодировки строки. В данном случае я все строки задал как WideChar и использовал функцию CreateProcessW. Так не должно возникнуть проблемы с кодировками символов и нахождении файла. В остальном код в целом выглядит рабочим. Если есть исходник C# приложения, тогда стоит дополнить его код выводом в консоль аргументов командной строки. Последний раз редактировалось xchgeaxeax, 21.02.2024 в 22:24. |
Этот пользователь сказал Спасибо xchgeaxeax за это полезное сообщение: | ||
T232006 (03.03.2024)
|