起源:python
AllMyTube下載核心,是c#組件調用c++dll,在dll中初始化Python運行環境。在工做目錄有msvcr90.dll文件時,程序運行會彈出以下錯誤:c++
R6034。c#
--------------------------- Microsoft Visual C++ Runtime Library --------------------------- Runtime Error! Program: E:\... R6034 An application has made an attempt to load the C runtime library incorrectly. Please contact the application's support team for more information. --------------------------- 肯定 ---------------------------
之因此與msvcr90.dll有關,是在測試中加減關聯dll發現,未及原理,發佈時不帶msvcr90.dll。cookie
覺得解決問題,其實掩耳盜鈴。app
1、幽靈同樣的msvcr90.dllide
由於忘記驗證,在環境變量任一路徑下有msvcr90.dll,亦會彈此錯誤。上Everything,找不一樣版本msvcr90.dll作替換問題依舊。函數
娘希匹!學習
谷歌之,大抵是改此文件名或刪除,與我發現相似,未有完全解決方法。咱們不能刪除用戶機子上環境變量路徑中此文件,辦不到。測試
說是有些第三方軟件,把msvcr90.dll裝在系統Path目錄或裝在它本身目錄而把其路徑加入系統Path中。網站
箭在弦上,不得不發,重拾c++,單步追之……
2、可疑的_AES.pyd
留意編譯信息,發現加載_AES.pyd組件時,有加載python27.dll及msvcr90.dll行爲,會不會它搞的鬼?
單步跟之,異常信息如圖:
託管調試助手「LoaderLock」在「E:\Apps\DownloadCore\VideoDownloader_v3\win\bin\Debug\Demo.exe」中檢測到故障。 其餘信息: 正試圖在 OS 加載程序鎖內執行託管代碼。不要嘗試在 DllMain 或映像初始化函數內運行託管代碼,這樣作會致使應用程序掛起。
且其爲反覆觸發。
代碼中我找到了調用位置,加try...catch(...)屏蔽,無效:
try{ pyModule = PyImport_ExecCodeModule("WondershareDownloader", pyScript); } catch(...){ }
怎麼辦……
咱們應用之python3環境,它卻依然去找python27.dll,不應。
Copy python27.dll至運行目錄,亦無效;改_AES.pyd名,能夠,再也不彈異常框。
就它丫的鬼!但cookies解密需用此庫,如之奈何?
3、無恥的_AES.pyd
好,即如此,想替代方案。上Everything,找到另個_AES.pyd,Copy過去:
29kb那個,是有問題的,30kb這個,沒有問題。
上PyCharm,單步驗證此.pyd文件,看替換以後,解密是否如常工做:
固然不能……
欲用AES加解密功能,尚需找路。
以PyCharm啓動Python2環境調試無事,啓動Python3環境,亦是上面錯誤。而c++環境,不過是給異常作個轉發。
p2:
p3:
直接以python.exe運行之:
此爲問題之源也!
再看_AES.pyd依賴關係:
無恥之甚,擾人之極!
MSVCR90.DLL赫然在列。copy相關文件入執行目錄,亦不解決問題,算了吧,不掙扎了……
4、折衷方案
確定是其所用的關聯dll未全或版本不對所致。不找了,不麻煩了!
去了這個_AES.pyd吧,解決眼前問題最重要!有兩個網站用到其解密,待時間從容,再作解密研究。
Google之,stachoverflow上面,亦是處理msvcr90.dll,治標不治本,無多大參考意義
參考資料: