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

### Использование `CreateProcess` vs `ShellExecute`: запуск документов в Delphi XE2 без ошибок

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

Использование CreateProcess vs ShellExecute: запуск документов в Delphi XE2 без ошибок

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

Анализ проблемы

Проблема заключается в том, что CreateProcess предназначена для запуска исполняемых файлов, в то время как для открытия документов и других файлов, не являющихся исполняемыми, следует использовать функцию ShellExecute. Это связано с тем, что ShellExecute обращается к системному реестру для определения программы, ассоциированной с типом файла, и запускает её.

Пример кода с использованием ShellExecute

procedure StartProcess(WorkDir, Filename: string; Arguments : string = '');
var
  Hwnd: HWND;
  lCmd: string;
begin
  lCmd := WorkDir + Filename;
  if Arguments <> '' then
    lCmd := lCmd + ' ' + Arguments;
  Hwnd := ShellExecute(0, nil, PChar(lCmd), 0, 0, SW_SHOWNORMAL);
  if Hwnd <= (HWND)32 then
    ShowMessage('Ошибка запуска файла: ' + IntToStr(Hwnd - (HWND)32));
end;

Использование процедуры

procedure TFrmStartProcess.Button2Click(Sender: TObject);
begin
  StartProcess('D:\', 'klad.xls');
end;

вместо StartProcess с использованием CreateProcess позволит открыть файл klad.xls с помощью программы, ассоциированной с данным типом файлов.

Подтвержденный ответ

Используйте функцию ShellExecute для запуска документов и других типов файлов, которые не являются исполняемыми. Это обеспечит корректное открытие файлов с помощью соответствующих программ, ассоциированных с ними в операционной системе.

Альтернативный ответ и комментарии

В комментариях упоминается, что предыдущая версия кода использовала ShellExecute для запуска документов, что объясняет успешный запуск файлов в предыдущей версии приложения на Delphi 2007. Смена функции на CreateProcess в версии Delphi XE2 привела к возникновению ошибки, так как CreateProcess не предназначена для работы с документами и другими файлами, кроме исполняемых.

Заключение

При работе с документами и другими типами файлов в Delphi XE2, рекомендуется использовать функцию ShellExecute вместо CreateProcess для корректного запуска файлов с помощью соответствующих программ, ассоциированных с ними операционной системой.

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

Контекст: При использовании `CreateProcess` в Delphi XE2 возникает ошибка при попытке открыть документы, в то время как для корректного запуска следует использовать `ShellExecute`, которое обращается к системному реестру для определения ассоциированной п


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

Получайте свежие новости и обновления по 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:23:58/0.0032491683959961/0