VS2010 MFC exe独立系统环境运行

来源:互联网 发布:加一联创耳机知乎 编辑:程序博客网 时间:2024/06/08 06:35

如何让一个VS 生成的 exe 在没有安装VS 以及 依赖项dll 的电脑上运行,尝试了一下,将中间遇到的问题记录一下。

1. 在vs里面编译运行可以,但是点击Debug里面的.exe却显示如下问题:

程序目录下已经添加此dll文件,一般情况下,我们会把程序中调用到的dll 文件放于.exe同一目录下。

显示为dll文件问题,后发现为路径问题,我的.exe文件 路径为:工程目录/x64/Debug/**.exe,后将 .exe文件拷贝至 工程目录/Debug/**.exe ,点击可以运行。因为我在工程目录下添加了lib、include、Resource等文件夹,代码中有关路径的问题导致的。

2.  在其他电脑上 用程序无法正常启动0xc0150002 的问题:

试用的另一台电脑有安装vs等,但是不管是点击exe还是直接用vs打开编译都会出现此类错误。

查找资料有说将设置为在静态链接库中使用MFC和MT,但是如果使用的静态库会有很多错误,未识别的外部符号等,还需要自己重新静态编译库,还是pass掉此种方法。

考虑到是因为机器上的dll文件不相同所致,可能是机器上没有需要的dll文件,即使有也不能保证dll文件的版本相同。

借助于工具 Dependence 来查看所生成的exe文件依赖的dll文件有哪些 ,可以从此网站下载软件http://www.dependencywalker.com/

如图:

无视红色的错误提示信息,左侧窗口可以查看.exe都是依赖于哪些dll文件,将这些dll文件全部拷贝到.exe文件夹目录下,可以运行。

opencv类的都在opencv安装目录下OpenCv244\opencv\build\x64\vc10\bin;

msvcp100.dll等在 s安装目录\VC\redist\x64\Microsoft.VC100.CRT和\VC\redist\Debug_NonRedist\x64\Microsoft.VC100.DebugCRT;

 需要的系统的dll文件都在C:\Windows\System32,在我需要的项目中光此文件下的dll文件就拷贝了二十多个。


3.为了让32位与64位的电脑都能运行,要将工程改为32位。
在X64 win7 系统下 vs2010建立工程设置为 win32 调用 opencv 32位库以及配置了32位的dll文件,编译可以通过,运行出现错误:
应用程序无法正常启动0xc000007b 
依然是dll文件问题,dll文件没有在搜索路径上,或者dll文件位数不对。
在工程中Configuration Properties-> VC++ Directories -> Executable Directories中添加 bin路径,没有用,虽然其中默认包括了 $(PATH)。
需要将dll文件放于exe同目录下,或者加入系统环境变量path。

4. 同样是3的问题中,将exe所有依赖的dll文件全部换为32位的,程序报**.dll文件没有被指定在windows运行,或者包含错误。
我以为系统32位dll文件在C:\Windows\SysWOW64路径下。sysWoW64 (Windows-on-Windows 64-bit)是一个Windows操作系统的子系统, 能够运行32-bit 应用  windows操作系统程序, 并且在所有的64-bit 版本的windows上都存在。
之前换成系统在C:\Windows\System32下的dll文件会报错,后来就换成自认为32位dll所在的C:\Windows\SysWOW64,两者程序报错相同。
后从网上从新下载dll文件拷贝到exe同目录下,可以运行。
后发现所调的文件在C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Include下。


5. 问题4解决后,程序的某些功能失效,比方说点击一个按钮,打开一个对话框,这时候对话框弹不出来。
这种情况,我在测试电脑上装了vs2010后,把 exe同目录下系统dll文件删除,这样程序会调用系统的dll文件,这个时候对话框可以打开,发现是所调用的dll文件不同。
且opencv的功能有问题,cvcapture一直返回NULL,疑似是dll文件拷贝不全的原因,将dll文件全部拷贝到exe同目录下没有问题。但是另用一台电脑依旧只返回NULL,此原因没有确切搞清楚。


0 0
原创粉丝点击