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

**Решение проблемы с запуском `OpenFiles.exe` в Delphi XE2 и экспортом списка файлов**

Delphi , Синтаксис , Справочник по API-функциям

В данном запросе пользователь столкнулся с проблемой запуска утилиты OpenFiles.exe из среды разработки Delphi XE2 для экспорта списка открытых файлов в текстовый файл. Проблема заключается в том, что, несмотря на успешное выполнение команды, файл с результатами не создается. Пользователь пытался решить проблему, запуская OpenFiles.exe напрямую и через скрипт .bat, но в обоих случаях, когда команда выполнялась из Delphi, файл создавался, но оставался пустым. В качестве альтернативного ответа предложено использовать командный интерпретатор cmd.exe для выполнения команды или же использовать функцию CreateProcess для запуска процесса с перенаправлением вывода в файл.

Решение проблемы с запуском OpenFiles.exe в Delphi XE2 и экспортом списка файлов

Введение

OpenFiles.exe — это утилита в операционной системе Windows, предназначенная для запроса списка открытых файлов на рабочей станции. В данной статье мы рассмотрим, как правильно использовать эту утилиту из приложения, разработанного в среде Delphi XE2, для экспорта списка открытых файлов в текстовый файл.

Проблема

При попытке запустить OpenFiles.exe из Delphi XE2 с использованием функции ShellExecute, файл с результатами не создается. Пользователь уже пытался решить проблему, изменяя параметры запуска и даже перенаправляя вывод в файл через скрипт .bat, но без успеха.

Пример кода

Пример кода, предоставленный пользователем, возвращает успешный код завершения процесса, но файл с результатами остается пустым. Это может быть связано с неправильным перенаправлением вывода, поскольку прямой вызов OpenFiles.exe не включает в себя механизм обработки командной строки.

Предложенное решение

В альтернативном ответе предложено два варианта решения проблемы: 1. Вызвать ShellExecuteEx, передав в качестве параметра командный интерпретатор cmd.exe, который выполнит необходимую работу. 2. Использовать CreateProcess для запуска другого процесса, но передать в него дескриптор файла в качестве дескриптора стандартного вывода для нового процесса.

Пример с использованием cmd.exe

FillChar(exInfo, SizeOf(exInfo), 0);
with exInfo do
begin
  cbSize := SizeOf(exInfo);
  fMask := SEE_MASK_NOCLOSEPROCESS or SEE_MASK_FLAG_DDEWAIT;
  lpFile := 'cmd.exe';
  lpParameters := '/c Openfiles.exe /query /s 127.0.0.1 /nh >c:\OpenFilesExport.txt';
  nShow := SW_SHOWNORMAL;
end;

Важные замечания

  • Проблема с перенаправлением вывода (>) требует использования командного интерпретатора.
  • При использовании CreateProcess необходимо создать файл с помощью CreateFile и передать его дескриптор как дескриптор стандартного вывода для нового процесса, а также убедиться, что дескриптор файла наследуем.
  • Важно дождаться завершения процесса, чтобы корректно закрыть дескриптор файла.
  • Текущий цикл ожидания в примере пользователя является неэффективным и может привести к избыточному потреблению ЦП.

Заключение

Пользователь уже испытал на практике вариант с использованием cmd.exe, но столкнулся с проблемой создания файла нулевого размера. Возможна проблема совместимости 32/64 бит, особенно если родительский процесс является 32-битным. Также рекомендуется избегать размещения файлов в системном каталоге, что может быть причиной возникновения ошибок.

Обратите внимание

Пользователь подчеркнул, что OpenFiles.exe является консольным приложением, расположенным в каталоге Windows\System32, и что при использовании других консольных приложений с предложенным кодом проблемы не возникает.

Рекомендации по дальнейшим действиям

  • Проверить версию OpenFiles.exe, совместимую с разрядностью родительского процесса.
  • Переместить скрипты и утилиты в другой каталог, исключая системный.
  • Провести дополнительное тестирование и отладку кода для выявления и устранения возможных ошибок.

Эта статья предоставляет обзор проблемы и рекомендуемые решения для запуска OpenFiles.exe из Delphi XE2 и экспорта списка открытых файлов в текстовый файл.

Создано по материалам из источника по ссылке.

Пользователь сталкивается с проблемой экспорта списка открытых файлов в текстовый файл через утилиту `OpenFiles.exe` из среды разработки Delphi XE2, где, несмотря на успешное выполнение команды, результат записывается в пустой файл.


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

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




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


:: Главная :: Справочник по API-функциям ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2024-12-26 14:45:31/0.0036129951477051/0