Не удалось выполнить CreateProcess с PhotoViewer.dll - PullRequest
0 голосов
/ 02 декабря 2009

В моем приложении есть интерфейс, где пользователь может выбрать любой файл и открыть его в приложении по умолчанию, в зависимости от ассоциации файлов.

Я использую FindExecutable и CreateProcessAsUser с токеном Explorer.

Теперь проблема в том, что файлы изображений, например .jpg, FindExecutable возвращает «C: \ Program Files \ Windows Photo Gallery \ PhotoViewer.dll», затем CreateProcessAsUser возвращает «ERROR_BAD_EXE_FORMAT (193)% 1 не является допустимым Win32 приложение.". Я передавал NULL в качестве второго параметра для CreateProcessAsUser, отправляя исполняемый путь в lpCommandLine (например, CreateProcessAsUser (hToken, NULL, szCmdline, ...)).

Может кто-нибудь помочь мне в решении этой проблемы?

С уважением, Манодж

Ответы [ 2 ]

1 голос
/ 02 декабря 2009

Исполняемый файл Win32 имеет расширение .EXE; DLL не является исполняемым файлом. CreateProcess не может создать процесс только с .DLL. Отсутствующий .EXE - это "rundll32.exe".

Однако это не то, что вам нужно: вам нужно поведение Shell. ShellExecuteEx() обычно самая удобная функция. AssocQueryString() может быть уместно в этом случае с правильными флагами: ASSOCSTR_EXECUTABLE для получения исполняемого файла, если он еще не запущен, и ASSOCSTR_DDEAPPLICATION и т. Д., Если приложение уже запущено.

0 голосов
/ 02 декабря 2009

как насчет использования ShellExecuteEx с правильно инициализированной структурой? Это должно вызвать действие по умолчанию для данного файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...