2014-01-21 60 views
0

注:我已經看着下面的問題,但它沒有提供洞察:PDF file does not get open from ShellExecute function in Visual Studio, C++的ShellExecute在MFC不打開Adobe十一

我有同樣的問題,如對上述問題的海報。

嘗試使用ShellExecute從MFC應用程序打開PDF文件。 Win 8 64位系統上的Adobe XI。

hReturn = ::ShellExecuteA(NULL,"open",sPath,NULL,NULL,SW_SHOWMAXIMIZED); 

sPath是一個CString雖然我已經試過相同的結果替代品。我也試過SW_SHOW,SW_SHOWNORMAL。當我將HINSTANCE轉換爲int時,ShellExecute返回42。我明白這意味着它會成功打開。實際上,如果我在執行命令時看到任務管理器,Adobe Reader將在任務管理器中響應打開,但Adobe窗口不會打開。

當我退出我的應用程序時,Adobe仍處於打開狀態。

如果我試圖打開目標PDF文件,O/S說它不能打開,因爲它已經在另一個應用程序中打開。當我在任務管理器的Adobe Reader上「結束任務」時,它釋放該文件。

如果我點擊該文件,它會在Adobe Reader中打開。

因此,我從中推斷出ShellExecute正在啓動Adobe,它正在獲取正確的文件,並且該文件確實是可讀的。

我也確認ShellExecute正在通過直接引用txt文件來工作。它在記事本中打開罰款。

hReturn = ::ShellExecuteA(NULL,"open","d:\\develop\\readme.txt", NULL, NULL, SW_SHOWMAXIMIZED); 

任何想法?

感謝

+0

你試過只是'SW_SHOW'。你有沒有嘗試省略「打開」動詞? –

+0

是的,我試過SW_SHOW。 – KokoCa

+0

我剛剛發現,如果以管理員身份運行我的應用程序,它可以正常工作。然後......從那時起,無論我如何運行,它都能正常工作。這對任何人都沒有任何意義嗎?它解決了我在這臺特定機器上的問題,但是當我分發它時,恐怕它會很脆弱。 – KokoCa

回答

0

這似乎是一個已知的問題通過的ShellExecuteEx在Win8中打開PDF文件。我在安裝過程結束時嘗試打開PDF時遇到了同樣的問題。在Win7上它工作得很好。在Win8上,它顯示你描述的症狀。我能夠在安裝程序中對其進行高級權限的追蹤。我不確定爲什麼這會對事情產生不利影響,但它確實如此。作爲替代方案,我們將該文件作爲HTML文檔來打開。我們仍在尋找更好的解決方案。

相關問題