Использование 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
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.