无法使用PhotoViewer.dll执行CreateProcess

时间:2009-12-02 14:41:52

标签: c++ winapi

在我的应用程序中,有一个界面,用户可以根据文件关联选择任何文件并在其默认应用程序中打开。

我使用Explorer令牌使用FindExecutable和CreateProcessAsUser。

现在的问题是图片文件说.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,...))。

任何人都可以帮我解决这个问题吗?

此致 的Manoj

2 个答案:

答案 0 :(得分:1)

Win32可执行文件的扩展名为.EXE; DLL不是可执行文件。 CreateProcess无法仅使用.DLL创建进程。缺少的.EXE是“rundll32.exe”。

但是,这不是你想要的:你想要Shell的行为。 ShellExecuteEx()通常是最方便的功能。在这种情况下,AssocQueryString()可能是合适的,使用正确的标志:ASSOCSTR_EXECUTABLE以获取可执行文件以防它尚未运行,ASSOCSTR_DDEAPPLICATION等以防应用程序已运行。

答案 1 :(得分:0)

如何将ShellExecuteEx与正确初始化的结构一起使用?这应该调用给定文件的默认操作。