起源:

AllMyTube下载核心,是c#组件调用c++dll,在dll中初始化Python运行环境。在工作目录有msvcr90.dll文件时,程序运行会弹出如下错误:

R6034。

---------------------------
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。

以为解决问题,其实掩耳盗铃。

一、幽灵一样的msvcr90.dll

因为忘记验证,在环境变量任一路径下有msvcr90.dll,亦会弹此错误。上Everything,找不同版本msvcr90.dll做替换问题依旧。

娘希匹!

谷歌之,大抵是改此文件名或删除,与我发现类似,未有彻底解决方法。我们不能删除用户机子上环境变量路径中此文件,办不到。

说是有些第三方软件,把msvcr90.dll装在系统Path目录或装在它自己目录而把其路径加入系统Path中。

箭在弦上,不得不发,重拾c++,单步追之……

二、可疑的_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解密需用此库,如之奈何?

三、无耻的_AES.pyd

好,即如此,想替代方案。上Everything,找到另个_AES.pyd,Copy过去:

29kb那个,是有问题的,30kb这个,没有问题。

上PyCharm,单步验证此.pyd文件,看替换之后,解密是否如常工作:

当然不能……

欲用AES加解密功能,尚需找路。

以PyCharm启动Python2环境调试无事,启动Python3环境,亦是上面错误。而c++环境,不过是给异常做个转发。

p2:

p3:

直接以python.exe运行之:

此为问题之源也!

再看_AES.pyd依赖关系:

无耻之甚,扰人之极!

MSVCR90.DLL赫然在列。copy相关文件入执行目录,亦不解决问题,算了吧,不挣扎了……

四、折衷方案

肯定是其所用的关联dll未全或版本不对所致。不找了,不麻烦了!

去了这个_AES.pyd吧,解决眼前问题最重要!有两个网站用到其解密,待时间从容,再做解密研究。

Google之,stachoverflow上面,亦是处理msvcr90.dll,治标不治本,无多大参考意义

参考资料:

Runtime error R6034 in embedded Python application

C++调用Python2.7出现R6034错误. - 学习笔记 - CSDN博客

天坑!c++调用python,遭遇R6034问题的更多相关文章

  1. 调用python 报R6034 错误

    R6034 指的是:"An application has made an attempt to load the C runtime library incorrectly. Please ...

  2. cpp 调用python

    在用cpp调用python时, 出现致命错误: no module named site  ,  原因解释器在搜索路径下没有找到python库.可以在调用Py_Initialize前,调用 Py_Se ...

  3. c调用python

    #include <Python.h>//python33(python2.x有几个函数不对应) /* PyImport_ImportModule 导入一个Python模块并返回它的指针 ...

  4. linux+php+apache web调用python脚本权限问题解决方案

    lamp : linux + apache + mysql + php 在上篇随笔中linux+php+apache调用python脚本时出现的问题的根本原因是:apache运行时使用的apache用 ...

  5. linux+php+apache web调用python脚本权限问题

    lamp : linux + apache + mysql + php 在近期项目中使用 linux + apache + php调用python脚本是出现以下权限问题: build/bdist.li ...

  6. C#中调用python方法

    最近因为项目设计,有部分使用Python脚本,因此代码中需要调用python方法. 1.首先,在c#中调用python必须安装IronPython,在 http://ironpython.codepl ...

  7. PHP 调用Python脚本

    上次做用户反馈自动翻译,写了个python脚本,将日文的用户反馈翻译成中文,效果虽然可以,但其它不懂python的童鞋就没法使用了,所以搭了个web服务,让其他人可以通过网页访问查询.使用的是apac ...

  8. C++中调用Python脚本

    C++中调用Python脚本的意义就不讲了,至少你可以把它当成文本形式的动态链接库, 需要的时候还可以改一改,只要不改变接口, C++的程序一旦编译好了,再改就没那么方便了 先看Python的代码 代 ...

  9. java调用python代码

    同样的我们需要安装jython,具体的步骤如下: 1. 去 http://sourceforge.net/projects/jython/ 下载最新的jython相关的jar包. 2. 下载下来的ja ...

  10. C++调用python

    本文以实例code讲解 C++ 调用 python 的方法. 本文在util.h中实现三个函数: 1. init_log: 用google log(glog)初始化log 2. exe_command ...

随机推荐

  1. linux centos7下mysql安装--韩国庆

    首先我先给大家介绍下MariaDB和mysql的区别. 上图,“MySQL之父”的骨灰级程序员Monty,但是mysql被Oracle收购后,Monty又开始去发展另一条数据库的道路,并且以Monty ...

  2. Altium Designer 放置机械孔

    先放置一个圆弧,将圆选中:执行Tools -> Convert -> Create Board Cutout from Selected Primitives

  3. HTTPS的内网访问和访问外网

    https://launchpad.support.sap.com/#/notes/2461900 https://wiki.scn.sap.com/wiki/display/Security/Tro ...

  4. 灰熊:在这6个信息流和DSP平台投放后,我总结了这些血泪经验!

    笔者有幸参与公司的一款重度游戏的推广,推广以来市面上主流的信息流和DSP 平台都投过一番,今天就零零碎碎地讲讲各个平台的特点以及用户质量. 需要提前说明的是,文章的观点仅限于各个平台的 iOS 流量, ...

  5. (17/24) webpack实战技巧:生产环境和开发环境并行设置,实现来回切换

    1. 概述 生产环境和开发环境所需依赖是不同: --开发依赖:就是开发中用到而发布时用不到的.在package.json里面对应的就是devDependencies下面相关配置. --生产依赖: 就是 ...

  6. Anatomy of a Database System学习笔记 - 存储管理

    使用裸设备,还是使用文件系统?   描述 pros cons 裸设备 顺序读磁盘快比随机要快10-100倍,DB比OS更懂磁盘负载,因此很多DB是直接管理数据块如何存放的. DB对裸设备的管理,比文件 ...

  7. Linux 总线、设备、驱动模型 与 设备树

    1.总线.设备.驱动模型 本着高内聚.低耦合的原则,Linux 把设备驱动模型分为了总线.设备和驱动三个实体,这三个实体在内核里的职责分别如下: 设备和驱动向总线进行注册,总线负责把设备和对应的驱动绑 ...

  8. NSIS 查找目录下的所有文件夹

    在制作安装包的时候,需要查看下某一目录下的所有文件夹的名称.经过查资料发现需要用到NSIS 的一个插件Locate.下载该插件后,会在NSIS的安装目录 ...Program Files\NSIS\P ...

  9. Jacobian矩阵、Hessian矩阵和Newton's method

    在寻找极大极小值的过程中,有一个经典的算法叫做Newton's method,在学习Newton's method的过程中,会引入两个矩阵,使得理解的难度增大,下面就对这个问题进行描述. 1, Jac ...

  10. cuda 配置要点

    1. 安装驱动 :sudo apt-get install nvidia- 2. 安装cuda : cuda 文件中包含驱动程序,因此在安装过程中当被问及是否安装驱动时,选择no 3. 安装cudnn ...