天坑!c++調用python,遭遇R6034問題

起源: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.dllcookie

覺得解決問題,其實掩耳盜鈴。app

 

1、幽靈同樣的msvcr90.dllide

由於忘記驗證,在環境變量任一路徑下有msvcr90.dll,亦會彈此錯誤。上Everything,找不一樣版本msvcr90.dll作替換問題依舊。函數

娘希匹!學習

谷歌之,大抵是改此文件名或刪除,與我發現相似,未有完全解決方法。咱們不能刪除用戶機子上環境變量路徑中此文件,辦不到。測試

說是有些第三方軟件,把msvcr90.dll裝在系統Path目錄或裝在它本身目錄而把其路徑加入系統Path中。網站

箭在弦上,不得不發,重拾c++,單步追之……

 

2、可疑的_AES.pyd

留意編譯信息,發現加載_AES.pyd組件時,有加載python27.dllmsvcr90.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,治標不治本,無多大參考意義

 

 

參考資料:

Runtime error R6034 in embedded Python application

C++調用Python2.7出現R6034錯誤. - 學習筆記 - CSDN博客

相關文章
相關標籤/搜索