在我的应用程序中,有一个界面,用户可以根据文件关联选择任何文件并在其默认应用程序中打开。
我使用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
答案 0 :(得分:1)
Win32可执行文件的扩展名为.EXE; DLL不是可执行文件。 CreateProcess无法仅使用.DLL创建进程。缺少的.EXE是“rundll32.exe”。
但是,这不是你想要的:你想要Shell的行为。 ShellExecuteEx()
通常是最方便的功能。在这种情况下,AssocQueryString()
可能是合适的,使用正确的标志:ASSOCSTR_EXECUTABLE
以获取可执行文件以防它尚未运行,ASSOCSTR_DDEAPPLICATION
等以防应用程序已运行。
答案 1 :(得分:0)
如何将ShellExecuteEx
与正确初始化的结构一起使用?这应该调用给定文件的默认操作。