1

我們有一個相當大的應用程序,用C++編寫,運行在Windows Server 2003和Windows Server 2008 R2上。它使用GetOpenFileName API調出打開文件對話框,以選擇視頻文件。Windows Server 2008 R2上的常見對話框:GetOpenFileName中的崩潰

我們看到,在Windows Server 2008 R2上,我們偶爾會在打開文件對話框中發生崩潰。主GUI線程正在等待工作線程,並且工作線程正在獲取訪問衝突異常。堆棧跟蹤看起來是這樣的:

[email protected]() 
shell32.dll!LinkInfo_LoadFromStream() + 0x7d bytes 
shell32.dll!CShellLink::_LoadFromStream() + 0x14b bytes  
shell32.dll!CShellLink::Initialize() + 0x1a bytes 
shell32.dll!InitializeFileHandlerWithStream() + 0xc4 bytes 
shell32.dll!CFileSysItemString::HandlerCreateInstance() + 0x13b bytes 
shell32.dll!CFileSysItemString::LoadHandler() - 0x9f1d bytes 
shell32.dll!CFSFolder::_CreatePerInstanceDefExtIcon() + 0x9b bytes 
shell32.dll!CFSFolder::_CreateDefExtIcon() + 0xb6 bytes  
shell32.dll!CFSFolder::s_GetExtractIcon() + 0x1e bytes 
shell32.dll!CFSFolder::_BindHandler() - 0xd759 bytes 
shell32.dll!CFSFolder::GetThumbnailHandler() + 0x51 bytes 
shell32.dll!_CreateThumbnailHandler() + 0x61 bytes 
shell32.dll!CShellItem::BindToHandler() - 0x20a93 bytes  
[email protected]() + 0x63 bytes 
shell32.dll!_GetILIndexFromItem() + 0x5f bytes 
[email protected]() - 0x3857d bytes 
shell32.dll!CFSFolder::GetIconOf() + 0xa57c3 bytes 
[email protected]() + 0x24 bytes 
[email protected]() + 0x3d bytes 
shell32.dll!CRegFolder::GetIconOf() + 0x10a892 bytes 
[email protected]() + 0x24 bytes 
[email protected]() + 0x3d bytes 
explorerframe.dll!CNscIconTask::_Extract() + 0x1f bytes  
explorerframe.dll!CNscOverlayTask::InternalResumeRT() + 0x31 bytes 
explorerframe.dll!CRunnableTask::Run() + 0xa2 bytes  
shell32.dll!CShellTask::TT_Run() + 0x5b bytes 
shell32.dll!CShellTaskThread::ThreadProc() + 0x99 bytes  
shell32.dll!CShellTaskThread::s_ThreadProc() + 0x1b bytes 
[email protected]() + 0xe bytes 
[email protected]() + 0xdf bytes 
[email protected]() - 0x1185 bytes 
[email protected]@12() + 0x12 bytes  
[email protected]() + 0x27 bytes 
[email protected]() + 0x1b bytes  

看來,其他一些人遇到了類似的問題:MSDN thread from 2011

「我有一個打開普通對話框(8R2)的應用程序崩潰了同樣的情況。有時,它有助於重新啓動應用程序並嘗試again..sometimes沒有。因爲這種情況發生的一對夫婦的應用來自不同的供應商,這更可能是一個共同對話的問題。「

「我想在這裏發現我們遇到了與2008 R2機器相同的問題,它可以是任何程序(並且我曾在Notepad.exe中看到過它)當您查看事件查看器,您會發現崩潰發生在通用對話框調用的不同模塊中,它發生在32位程序和64位,它不是100%的時間發生,而是發生在50%左右。看到了何時何地發生的任何模式。「

我們的假設是,打開文件對話框試圖從視頻文件中獲取一些縮略圖信息,但視頻解碼器崩潰。

有沒有其他人遇到這個問題?如果是這樣,你能找出根源是什麼嗎?你知道爲什麼IsValidLinkInfo會得到訪問衝突嗎?

是否有任何可以應用的解決方法?我們計劃嘗試刪除此特定文件類型(.ts)的文件關聯。有什麼辦法可以告訴打開文件對話框不要創建縮略圖嗎?

回答

0

更新:

我們發現another thread on ServerFault報告了類似的問題(「通常當你點擊文件/打開或文件/保存,但不是每一次崩潰」)。根據微軟的建議,另一位用戶(PG)能夠通過從Data Execution Prevention中排除應用程序來解決問題。

我們檢查了數據執行保護設置,發現它已設置爲「爲所有程序和服務啓用DEP,除了我選擇的那些程序和服務」。將其更改爲「僅啓用基本Windows程序和服務的DEP」後,問題不再發生。

相關問題