在
VC6中用MFC和API开发的项目,生成的release版,在多台电脑上测试通过。
现在需要在VS2005中继续开发该项目。将项目转到2005中后,在没有添加任何代码
的情况下,生成的release版只能在自己的电脑中运行。在多台没有安装VS2005的机器中
运行,都提示“应用程序未能正确配置,重新安装该程序...”
项目属性无CLR支持。通过 dependence 工具,发现缺少mfc80ud.dll和msvcrt.dll,拷
到程序文件夹中,问题依旧。我甚至把系统环境变量指定的文件夹下的所有dll都拷出来,
还是不行。
请教高手,这可能是什么原因?
答:static
答:能否详细一点说明?
答:是这样的,VS2005采用了与 VC6不同的查找引用文件的技术,它所用的mfc库不再在system32下了,而是在WinSxS中,你的问题解决方式有两个,
1.更改编译选项,使它不用.NET托管东西的支持
2.使用manifest文件
你可以参考http://www.google.com/search?source=ig&hl=en&rlz=&q=VCmanifest
答:http://msdn2.microsoft.com/en-us/library/Aa376307.aspx
答:还没来得及看。当时我就对这个WinSxs产生了疑问。
先谢谢了。
答:安装.netframe没有?是直接升级的吗?我现在也从事这个,没有遇到你这样的问题
答:我把WinSxS中所有文件拷到其它机器上,程序就可以正常运行了。
关于manifest我看了。我的理解是这样的,不知道对不对:
1、要发布自己的应用程序,避免DLL版本冲突等问题,一个好的办法是用privateassembly;
2、使用privateassembly的方法之一是将DLL和对应的manifest文件放到可执行文件所在路径。
现在我的问题是:
我将mfc80ud.dll和msvcrt.dll和对应的manifest文件拷到程序文件夹中,不能运行。
1、这是因为缺少DLL文件吗,或者是DLL版本不对?如何知道程序运行需要哪些DLL文件?程序运行还依赖两个自己写的DLL,
对于这两个DLL,是不是也要manifest文件?
2、或者是因为从WinSxS中拷出来的manifest文件应该重写,以适应自己的程序。将MSDN中给出的
示例和拷出来的manifest比较,差别在<filename="msvcrt.dll"/>中多了hash。
现在还没搞清楚如何createSide-by-SideAssembly,能否指点?(Side-by-SideAssemblyAPI?)
答:用mt.exe?
答:参考http://www.google.com/search?source=ig&hl=en&rlz=&q=VCmanifest
答:请教一下,怎么给帖子加分?
答:应该是编码配置问题unicode改为”未设置”
答:想知道搂住怎么解决的,谢谢
答:编译时选择在静态库中使用MFC,我的一个问题也是这样,但后来选择了在静态库中使用MFC以后正常,你自己试一下。
答:我是选择静态库中使用MFC,我一直没时间研究这个。现在初步估计是dll版本问题。也许VS2005中采用了新版本的dll?
还有一个编译选项“运行时库”选择MT、MD等。可能也和这个问题有关。
独立应用程序只依赖于并行程序集,且使用清单绑定到它的依赖项。应用程序不必完全独立即可在Windows上正常运行;但是,使应用程序完全独立后,将来可以节省为应用程序提供服务的时间。有关使应用程序完全独立的好处的更多信息,请参见IsolatedApplications。
当您使用VisualC2005生成本机C/C应用程序时,默认情况下,VisualStudio项目系统将生成一个清单文件,用于描述应用程序在VisualC库中的依赖项。如果应用程序仅具有这些依赖项,则使用VisualStudio2005重新生成该应用程序时,它将变成独立应用程序。如果应用程序在运行时还使用其他库,则可能需要将那些库重新生成为并行程序集。有关步骤,请参见生成C/C并行程序集。
VisualC2005支持Windows客户端应用程序的新部署模型,此模型基于独立应用程序和并行程序集的思想。在VisualC2005中,已将ATL、MFC、标准C以及CRT库重新生成为共享并行程序集,这些程序集安装在本机程序集缓存中(WinSxS文件夹)。默认情况下,VisualC2005将所有的本机C/C应用程序都生成为独立应用程序,这些应用程序使用清单描述它们在VisualC库中的依赖项。
将C/C程序生成为独立应用程序具有一系列的好处。例如,当其他C/C应用程序安装或卸载VisualC库时,不会影响独立应用程序。仍可将独立应用程序使用的VisualC库重新发布到应用程序的本地文件夹中或通过安装重新发布到本机程序集缓存(WinSxS);但是,通过使用“publisherconfigurationfile”(发行者配置文件),为已部署的应用程序提供VisualC库服务时会更加简单。借助于独立应用程序部署模型,更加容易确保在特定计算机上运行的C/C应用程序使用VisualC库的最新版本,同时使系统管理员和应用程序的作者仍可以控制应用程序与其依赖DLL的显式版本绑定。
本节讨论如何将C/C应用程序生成为独立应用程序并确保使用清单将它绑定到VisualC库。本部分的信息主要适用于本机VisualC应用程序(即非托管VisualC应用程序)。有关部署使用VisualC2005生成的本机应用程序的信息,请参见重新发布VisualC文件。
答:上面是在MSDN“生成C/C程序”里找到的。现在可以肯定和这有关。不过最近太忙了。没来得及细看。
答:部署的时候,加入c支持
需要安装个c支持软件,vs2005里有,打安装包的时候,加入c支持会自动带着
答:在你的开发机上找到,或从microsoft下载一个vcredist_x86.exe程序,然后在目标机器上运行一下。
现在需要在VS2005中继续开发该项目。将项目转到2005中后,在没有添加任何代码
的情况下,生成的release版只能在自己的电脑中运行。在多台没有安装VS2005的机器中
运行,都提示“应用程序未能正确配置,重新安装该程序...”
项目属性无CLR支持。通过 dependence 工具,发现缺少mfc80ud.dll和msvcrt.dll,拷
到程序文件夹中,问题依旧。我甚至把系统环境变量指定的文件夹下的所有dll都拷出来,
还是不行。
请教高手,这可能是什么原因?
答:static
答:能否详细一点说明?
答:是这样的,VS2005采用了与 VC6不同的查找引用文件的技术,它所用的mfc库不再在system32下了,而是在WinSxS中,你的问题解决方式有两个,
1.更改编译选项,使它不用.NET托管东西的支持
2.使用manifest文件
你可以参考http://www.google.com/search?source=ig&hl=en&rlz=&q=VCmanifest
答:http://msdn2.microsoft.com/en-us/library/Aa376307.aspx
答:还没来得及看。当时我就对这个WinSxs产生了疑问。
先谢谢了。
答:安装.netframe没有?是直接升级的吗?我现在也从事这个,没有遇到你这样的问题
答:我把WinSxS中所有文件拷到其它机器上,程序就可以正常运行了。
关于manifest我看了。我的理解是这样的,不知道对不对:
1、要发布自己的应用程序,避免DLL版本冲突等问题,一个好的办法是用privateassembly;
2、使用privateassembly的方法之一是将DLL和对应的manifest文件放到可执行文件所在路径。
现在我的问题是:
我将mfc80ud.dll和msvcrt.dll和对应的manifest文件拷到程序文件夹中,不能运行。
1、这是因为缺少DLL文件吗,或者是DLL版本不对?如何知道程序运行需要哪些DLL文件?程序运行还依赖两个自己写的DLL,
对于这两个DLL,是不是也要manifest文件?
2、或者是因为从WinSxS中拷出来的manifest文件应该重写,以适应自己的程序。将MSDN中给出的
示例和拷出来的manifest比较,差别在<filename="msvcrt.dll"/>中多了hash。
现在还没搞清楚如何createSide-by-SideAssembly,能否指点?(Side-by-SideAssemblyAPI?)
答:用mt.exe?
答:参考http://www.google.com/search?source=ig&hl=en&rlz=&q=VCmanifest
答:请教一下,怎么给帖子加分?
答:应该是编码配置问题unicode改为”未设置”
答:想知道搂住怎么解决的,谢谢
答:编译时选择在静态库中使用MFC,我的一个问题也是这样,但后来选择了在静态库中使用MFC以后正常,你自己试一下。
答:我是选择静态库中使用MFC,我一直没时间研究这个。现在初步估计是dll版本问题。也许VS2005中采用了新版本的dll?
还有一个编译选项“运行时库”选择MT、MD等。可能也和这个问题有关。
独立应用程序只依赖于并行程序集,且使用清单绑定到它的依赖项。应用程序不必完全独立即可在Windows上正常运行;但是,使应用程序完全独立后,将来可以节省为应用程序提供服务的时间。有关使应用程序完全独立的好处的更多信息,请参见IsolatedApplications。
当您使用VisualC2005生成本机C/C应用程序时,默认情况下,VisualStudio项目系统将生成一个清单文件,用于描述应用程序在VisualC库中的依赖项。如果应用程序仅具有这些依赖项,则使用VisualStudio2005重新生成该应用程序时,它将变成独立应用程序。如果应用程序在运行时还使用其他库,则可能需要将那些库重新生成为并行程序集。有关步骤,请参见生成C/C并行程序集。
VisualC2005支持Windows客户端应用程序的新部署模型,此模型基于独立应用程序和并行程序集的思想。在VisualC2005中,已将ATL、MFC、标准C以及CRT库重新生成为共享并行程序集,这些程序集安装在本机程序集缓存中(WinSxS文件夹)。默认情况下,VisualC2005将所有的本机C/C应用程序都生成为独立应用程序,这些应用程序使用清单描述它们在VisualC库中的依赖项。
将C/C程序生成为独立应用程序具有一系列的好处。例如,当其他C/C应用程序安装或卸载VisualC库时,不会影响独立应用程序。仍可将独立应用程序使用的VisualC库重新发布到应用程序的本地文件夹中或通过安装重新发布到本机程序集缓存(WinSxS);但是,通过使用“publisherconfigurationfile”(发行者配置文件),为已部署的应用程序提供VisualC库服务时会更加简单。借助于独立应用程序部署模型,更加容易确保在特定计算机上运行的C/C应用程序使用VisualC库的最新版本,同时使系统管理员和应用程序的作者仍可以控制应用程序与其依赖DLL的显式版本绑定。
本节讨论如何将C/C应用程序生成为独立应用程序并确保使用清单将它绑定到VisualC库。本部分的信息主要适用于本机VisualC应用程序(即非托管VisualC应用程序)。有关部署使用VisualC2005生成的本机应用程序的信息,请参见重新发布VisualC文件。
答:上面是在MSDN“生成C/C程序”里找到的。现在可以肯定和这有关。不过最近太忙了。没来得及细看。
答:部署的时候,加入c支持
需要安装个c支持软件,vs2005里有,打安装包的时候,加入c支持会自动带着
答:在你的开发机上找到,或从microsoft下载一个vcredist_x86.exe程序,然后在目标机器上运行一下。