VS 2005编译的程序不能运行的几个解决方法

这两天有点焦头烂额, 我们这边运行的好好的程序, 到了测试的机器上就不能启动(是根本运行不了, 而不是运行出错), 弄得我异常郁闷。 经过了一番摸索, 发现和 winxp、win2003中为解决dll hell而引入的manifest机制有关系。而以前我们用vs2003开发, 它并没有强制程序使用manifest, 但到了vs2005中, 这已经改成必需的了, 而我们并没有按照需要进行相关的配置, 所以程序启动不了了。 根据目前的经验, vs2005编译的程序不能启动大致有两个原因, 下面简单介绍解决办法。

1、在开发组的机器上(安装有vs2005)有时都不能启动

这一般是项目的文件被放在了fat/fat32分区上导致的, 解决方法是把它们都移动到ntfs分区上, 或者把“项目属性|Manifest Tool|General|Use FAT32 Work-around”设为yes。

2、开发组运行正常, 换到其它机器上就不行了

这一般就是系统dll(包括crt,mfc,atl等)没有正确配置导致的。 如果程序是release版, 那么很简单, 只要把“\SDK\v2。0\BootStrapper\Packages\vcredist_x86”下的"vcredist_x86。exe"拷贝到目标机器上运行即可, 这是以x86平台为例的, 如果你用的是别的cpu平台(amd64或ia64)把x86替换成相应的内容就可以了。

如果是debug版, 就复杂一些了, 首先要确定你需要的dll的版本, 绝大多数(注意:不是"所有")情况下它和编译器的版本相同, 通过vs2005的关于对话框就能看到, 如下图所示:


确定版本后, 在开发组的机器上进入“%windir%\winsxs"文件夹(下面将以x86平台8.0.50727.762版本的debug crt为例进行说明), 拷贝以下文件到目标机器的相同位置即可:

x86_Microsoft.VC80.DebugCRT_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_5490cd9f文件夹下的所有文件

Manifests文件夹下的x86_Microsoft.VC80.DebugCRT_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_5490cd9f.cat和x86_Microsoft.VC80.DebugCRT_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_5490cd9f.manifest

Policies\x86_policy.8.0.Microsoft.VC80.DebugCRT_1fc8b3b9a1e18e3b_x-ww_09e017b4文件夹下的8.0.50727.762.cat和 8.0.50727.762.policy

注意, 上面的操作只是在目标操作系统为winxp,win2003及以上时才需要的, 如果是win2000及以下的系统, 只要把第一个文件夹下的文件拷贝到system32中就行了。

附:

msdn上有关vc应用程序部署的几片文章, 供参考

Troubleshooting C/C++ Isolated Applications and Side-by-side Assemblies:http://msdn2.microsoft.com/en-us/library/ms235342.aspx

Deployment Examples:http://msdn2.microsoft.com/en-us/library/ms235285(VS.80).aspx

以下是与这个问题相关的一些系统提示信息, 为了让碰到这些问题的人更容易搜到这篇文章, 我把它们列在这里.

参照的汇编没有安装在系统上

应用程序要求的组件版本同另一个活动的组件有冲突。

系统无法执行指定的程序

ERROR_SXS_ASSEMBLY_NOT_FOUND

14003

0x800736B3

The referenced assembly is not installed on your system.

时间: 2024-08-31 20:28:59

VS 2005编译的程序不能运行的几个解决方法的相关文章

win8 eclipse 编译的程序不能运行

问题描述 win8 eclipse 编译的程序不能运行 win8 eclipse 编译的程序不能运行,总是被系统阻止了 解决方案 用admin权限允许程序.同时程序最好有数字签名 解决方案二: 看下是不是安装了杀毒软件,或者你的程序放在了没有权限的文件夹下.以管理员方式运行呢 解决方案三: 右键eclipse,然后点击"以管理员身份运行",试试看 解决方案四: 应该就是权限的问题, 解决方案五: 那你以管理员身份运行看看,win8对系统安全要求比较高

c#程序-c#窗体应用程序不运行下一行怎么解决,另外在一个窗体打不开另一个窗体

问题描述 c#窗体应用程序不运行下一行怎么解决,另外在一个窗体打不开另一个窗体 c#窗体应用程序不运行下一行怎么解决,另外在一个窗体打不开另一个窗体 解决方案 要给出相关上下文说明,相关代码样例,相关错误提示.不然一个三无问题别人要帮也帮不了啊. 解决方案二: 解决方案三: c#窗体依附于另一个窗体

Win8系统打开图片提示“在禁用UAC时,此应用程序无法激活”的几种解决方法

  现如今许多用户习惯把图片储存在win8系统电脑中,浏览时直接打开即可,但是Win8系统打开图片提示"在禁用UAC时,此应用程序无法激活",正常来说,图片都是可以正常打开的,遇到此问题该怎么办呢?下面小编分享Win8系统打开图片提示"在禁用UAC时,此应用程序无法激活"的几种解决方法. 故障原因: 官方说出现这个问题只要 开启UAC 功能就可以了. 解决办法: 方法一 1.进入系统"运行"然后我们输入"Regedit"就可以

win7 64位系统开机弹出netsh.exe应用程序错误的提示框的解决方法

win7 64位系统开机弹出netsh.exe应用程序错误的提示框的解决方法  方法一: 1.打开计算机,依次打开:C:WindowsSystem32wbem,在里面找到"Framedyn.dll",单击右键,选择复制; 2.返回到:C:WindowsSystem32 ,使用"ctrl+V"将"Framedyn.dll"文件粘贴到system32文件夹中即可. 方法二: 1.按下"Win+R"组合键打开运行,输入:msconf

win7无法自动运行U盘的解决方法

  U盘现如今已成为了主流的可移动数据存储工具,虽然各大网络巨头都推出了自己的在线云盘,但也没有影响到传统用户使用U盘的习惯,U盘的体积小.携带性以及可存储性是很多用户喜爱的原因之一,我们将U盘连接电脑即可向U盘中读写数据,通常情况下在将U盘连接电脑后,U盘将自动运行,不过有部分用户反映在win7系统下无法自动运行U盘,对于该问题应该如何解决呢?下面看小编为大家带来的解决方法! win7无法自动运行U盘的解决方法 1.点击开始,然后选择,在所有程序里面找到附件,左键双击将其打开. 2.在附件里面

win7系统提示某文件损坏请运行chkdsk工具的解决方法

  win7系统用户在操作使用系统的过程中,有时候会遇到一些平时很少见到的故障问题.比如某用户反馈的在电脑桌面右下角一直提示某文件损坏请运行chkdsk工具,关闭该提示,过不了多久又重新弹出.那么遇到这种烦人的情况我们应该怎么办呢?下面一起来了解下具体的解决方法吧! 解决方法: 1.鼠标点击win7系统"开始"菜单.选择"运行"选项; 2.在"运行"窗口中输入CMD字符命令,按确定键; 3.在出现的界面中输入 chkdsk c: /f并按确定键;

浏览器无法运行JAVA脚本的解决方法_javascript技巧

1.浏览器无法运行JAVA脚本的解决方法. rundll32.exe advpack.dll /DelNodeRunDLL32 %systemroot%System32dacui.dll  rundll32.exe advpack.dll /DelNodeRunDLL32 %systemroot%Catrooticatalog.mdb  regsvr32 /s comcat.dll  regsvr32 /s asctrls.ocx  regsvr32 /s oleaut32.dll  regsv

XP系统弹出Ravmond.exe应用程序错误的原因分析及解决方法

原因分析: 此电脑上安装了多套安全软件,Ravmond.exe为瑞星杀毒软件的监控程序,且瑞星工作不正常,最后将瑞星卸载掉后解决该问题. 解决方法: 安全软件建议只要安装一套即可,并不是越多越好,如果安装多套软件反而会出现错误冲突导致系统缓慢.关于应用程序错误,内存不能为read提示的问题,有些是在安装某些程序之后出现的,可以找到出现问题的程序软件,卸载即可解决,无需重装系统. 以上就是XP系统弹出Ravmond.exe应用程序错误的原因分析及解决方法,有同样问题的朋友可以按照上述的方法进行设置

微信小程序首页数据初始化失败的解决方法

一. 问题描述 用户首次后再次进入小程序时,我们通常需要通过获取用户openid或unionid用作唯一标示与后台进行数据交流,初始化用户信息.当我们通过第三方服务器跟微信建立请求时,微信需要用户确认是否公开信息.如图1,从console可以看到,在请求的同时,我们的首页index已经加载完成,图中初始化数据显示为空.无论我们将请求信息写在app.js的onload中或者index.js中,当我们点击确认后,请求信息才执行success方法,将第三方服务器返回的数据处理,这样的因需要用户点击而产