Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Подождать завершения DOS-задачи 2

Delphi , ОС и Железо , DOS и Консоль

Подождать завершения DOS-задачи 2

Сантехник - администратор сервера фирмы Sun.


function WinExecute(CmdLine: string; Wait: Boolean): Boolean;
var
  StartupInfo: TStartupInfo;
  ProcessInformation: TProcessInformation;
begin
  Result := True;
  try
    FillChar(StartupInfo, SizeOf(StartupInfo), 0);
    StartupInfo.cb := SizeOf(StartupInfo);
    if not CreateProcess(nil, PChar(CmdLine), nil, nil, True, 0, nil,
    nil, StartupInfo, ProcessInformation) then
      RaiseLastWin32Error;
    if Wait then
      WaitForSingleObject(ProcessInformation.hProcess, INFINITE);
  except
    Result := False;
  end;
end;

Вот перевод текста на русский язык:

Функция Delphi, называемая WinExecute, выполняет командную строку в Windows с помощью функции API CreateProcess. Функция принимает два параметра:

  • CmdLine: строка, представляющая командную строку для выполнения.
  • Wait: булевое значение, указывающее, нужно ли ждать завершения процесса перед возвращением.

Вот что происходит в коде: 1. Инициализируется структура StartupInfo, используемая для передачи информации о новом процессе функции CreateProcess. Структура заполняется нулями с помощью FillChar. 2. Устанавливается поле cb структуры StartupInfo в размер самой структуры. 3. Вызывается функция CreateProcess, создавая новый процесс, выполняющий команду, указанную в CmdLine. Функция принимает несколько параметров: * nil: handle родительского окна (не используется) * PChar( CmdLine ): команда для выполнения * nil: указатель на атрибуты безопасности (не используется) * nil: указатель на блок окружающей среды (не используется) * True: наследовать handles от родительского процесса * 0: флаги создания (не используется) * nil: указатель на атрибуты безопасности нового потока (не используется) * nil: указатель на блок окружающей среды нового потока (не используется) * StartupInfo: структура начальной информации * ProcessInformation: указатель на структуру TProcessInformation, заполняемую информацией о новом процессе 4. Если функция CreateProcess fails, она поднимает исключение Win32Exception с помощью функции RaiseLastWin32Error. 5. Если Wait равно True, функция ждет завершения процесса с помощью WaitForSingleObject. 6. Если происходит исключение при выполнении (например, из-за тай아ута или ресурсной ошибки), функция устанавливает Result в False.

Функция возвращает булевое значение, указывающее, была ли команда выполнена успешно.

Альтернативное решение: Вы можете использовать функцию ShellExecuteEx, которая более удобна для выполнения команд и ожидания их завершения:

function WinExecute(CmdLine: string; Wait: Boolean): Boolean;
var
  Info: TShellExecuteInfo;
begin
  Result := True;
  try
    FillChar(Info, SizeOf(Info), 0);
    Info.cbSize := SizeOf(Info);
    Info.fMask := SEE_MASK_FLAG_DODEFAULT or SEE_MASK_NOCLOSEPROCESS;
    Info.lpVerb := 'runas';
    Info.lpFile := PChar(CmdLine);
    Info.lpParameters := '';
    Info.nShow := SW_SHOWNORMAL;
    if not ShellExecuteEx(@Info) then
      RaiseLastWin32Error;
    if Wait then
      WaitForSingleObject(Info.hProcess, INFINITE);
  except
    Result := False;
  end;
end;

Функция ShellExecuteEx выполняет команду и ждет ее завершения. Она более удобна потому, что она заботится о многих деталях автоматически, таких как создание нового процесса и ожидание его завершения. Однако она может не предоставлять такой же уровень контроля над процессом выполнения, как оригинальный код с использованием CreateProcess.

Функция WinExecute в Delphi для ожидания завершения выполнения DOS-задачи с помощью CreateProcess и WaitForSingleObject.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: DOS и Консоль ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 00:56:21/0.0033490657806396/0