2009-12-02 84 views
0

在我的應用程序中,有一個界面,用戶可以根據文件關聯選擇任何文件並在其默認應用程序中打開。無法使用PhotoViewer.dll執行CreateProcess

我正在使用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,...))。

任何人都可以幫助我解決這個問題嗎?

問候, 馬諾

回答

1

Win32可執行文件的擴展名爲.EXE;一個DLL不是可執行文件。 CreateProcess無法創建一個只有.DLL的進程。缺少.EXE是「rundll32.exe」。

但是,這不是你在之後:你想要的殼行爲。 ShellExecuteEx()通常是最方便的功能。 AssocQueryString()在這種情況下可能是合適的,正確的標誌是:ASSOCSTR_EXECUTABLE獲取可執行文件,以防其尚未運行,如果應用程序已經運行,則爲ASSOCSTR_DDEAPPLICATION等。

0

怎麼樣使用ShellExecuteEx有正確初始化結構?這應該調用給定文件的默認操作。

+0

我的應用程序正在作爲web服務運行。因此ShellExecuteEx不會確保新應用程序總是在前臺打開。 – Manoj 2009-12-02 14:49:51

+0

您可能會成功嘗試「RUNDLL」。不過,我想指出的是,從Web服務運行桌面應用程序確實是一個糟糕的主意。 Web服務是客戶端通信的內容。 – 2009-12-02 15:04:37

+0

沒有桌面,所以它不會工作。 – bmargulies 2009-12-02 15:06:29