我們有一箇舊的ASP應用程序調用的遺留COM + dll。它會定期崩潰,並且調用堆棧看起來很奇怪幫助一個非常奇怪的COM + callstack
看來,調用DllUnregisterServer和CoInstall會出現在調用堆棧中(我們不會在代碼中動態安裝/卸載任何東西 - 它只是查詢一個數據庫)。
我想知道是否有可能MSI「文件保護」正在踢入並導致崩潰。你認爲這是可能的嗎?任何方式我可以挖掘更多的信息? (這是一個古老的VFP應用程序了,所以我不認爲我能得到適當的調試符號)
這裏的調用堆棧:
Call Stack:
vfp9t! + 0x2272f
vfp9t!VFPDllGetClassObject + 0xb6
ctcvccomasyncproxy!DllGetClassObject + 0x3e
ole32!CoInitializeSecurity + 0x5ff5
ole32!CoInitializeSecurity + 0x5bdc
ole32!CoGetTreatAsClass + 0x2a2
ole32!CoInitializeSecurity + 0x3a2b
COMSVCS!DispManGetContext + 0xbc07
ole32!CoInitializeSecurity + 0x3a2b
ole32!CoInstall + 0x6ed
ole32!CoQueryAuthenticationServices + 0x21aa
ole32!CoQueryAuthenticationServices + 0x2c56
ole32!CoGetContextToken + 0xd48d
ole32!CreateStreamOnHGlobal + 0x1b7c
ole32!CoCreateObjectInContext + 0xd9f
ole32!CoInstall + 0x903
ole32!CoGetContextToken + 0x12f5b
RPCRT4!NdrServerInitialize + 0x1fc
RPCRT4!NdrStubCall2 + 0x217
RPCRT4!CStdStubBuffer_Invoke + 0x82
ole32!StgGetIFillLockBytesOnFile + 0x13b27
ole32!StgGetIFillLockBytesOnFile + 0x13ad4
ole32!DcomChannelSetHResult + 0xaab
ole32!DcomChannelSetHResult + 0x495
ole32!CoFreeUnusedLibrariesEx + 0xb06
ole32!StgGetIFillLockBytesOnFile + 0x139e1
ole32!StgGetIFillLockBytesOnFile + 0x13872
ole32!StgGetIFillLockBytesOnFile + 0x12d59
ole32!CoFreeUnusedLibrariesEx + 0x9f5
ole32!CoFreeUnusedLibrariesEx + 0x9c0
USER32!LoadCursorW + 0x4cf5
USER32!LoadCursorW + 0x4e86
USER32!TranslateMessageEx + 0x10d
USER32!DispatchMessageW + 0xf
COMSVCS!DllUnregisterServer + 0x270
COMSVCS!DllUnregisterServer + 0x180
COMSVCS!DllUnregisterServer + 0xc6c
COMSVCS!DllUnregisterServer + 0xf4d
msvcrt!_endthreadex + 0xa3
kernel32!GetModuleHandleA + 0xdf
多線程應用程序中必須謹慎使用'GetModuleHandle'。也許你會更喜歡'GetModuleHandleEx',但這裏沒有太多可以繼續。 – AJG85
我們遇到的一個問題是,這不是C++對象 - 它是Visual Fox Pro,因此GetModuleHandle的調用不在我們的控制之下 - 我們可以訪問的代碼只調用CreateObject(),調用堆棧只是顯示代表我們的代碼。 – JMarsch
所以這是不兼容的錯誤代碼,你不能改變,但需要使用? FoxPro的最終版本是7年前...祝你好運! – AJG85