我有一个用C ++编写的简单.exe(使用Visual Studio 2005构建),它使用提供的API测试某些硬件。它在我构建的Windows 7机器上工作正常,但当我将它复制到另一台(Windows 7)机器并运行它(从命令行)时,我得到:
应用程序无法启动 因为它的并排配置 是不正确的。请看看 应用程序事件日志或使用 命令行sxstrace.exe工具 更多细节。
什么是“并排配置”?
我运行了sxstrace.exe并阅读了使用信息。看来我需要检测我的exe来生成sxstrace.exe的日志文件才有用吗?
我想问题是我的exe需要在其他机器上不存在的DLL,或者是错误的版本。我如何找出我的exe使用的DLL,以及它在我的机器上链接到哪个版本(它在哪里工作)?有关将其复制到另一台机器并使其运行的任何其他建议吗?更多信息会有帮助吗?
答案 0 :(得分:3)
mfawzymkh对answer“application has failed to start because the side by side configauration is incorrect”问题的spirulence(链接到问题{{3}}中与此问题的答案相关联)似乎适用于此问题问题也。 mfawzymkh写道:
您可以通过以下方式解决此问题 其中一个1-安装VC8 Debug CRT 2-将应用程序构建为静态链接
mfawzymkh对同一个答案的评论解释了如何构建静态链接:
在VS中构建它时,转到 项目 - >设置 - > C / C ++ - >代码 生成并选择Runtime Lib 选项是/ MTd而不是/ MDd
我做到了,并排配置消息消失了。 (在为我正在使用的DLL安装其他东西之后,我的EXE正常工作。)
答案 1 :(得分:2)
对于它的价值,我遇到了同样的问题。在事件查看器中,我收到一条错误消息:
“C:\\ MyExe.exe”的激活上下文生成失败。第12行的清单或策略文件“C:\\ MyExe.exe.Config”中出现错误。无效的Xml语法。
果然,我改变了连接字符串并省略了结束语。补充说,它解决了这个问题。
答案 2 :(得分:2)
“当你在VS中构建它时,转到项目 - > gt; settings-> C / C ++ - >代码生成并选择运行时库选项为/ MTd而不是/ MDd”为我工作,虽然我是感兴趣的是Release版本而不是Debug版本。
Microsofto说: / MT使您的应用程序使用运行时库的多线程静态版本。定义_MT并使编译器将库名称LIBCMT.lib放入.obj文件中,以便链接器使用LIBCMT.lib来解析外部符号。
/ MD 使您的应用程序使用运行时库的多线程和DLL特定版本。定义_MT和_DLL并使编译器将库名MSVCRT.lib放入.obj文件中。 使用此选项编译的应用程序静态链接到MSVCRT.lib。该库提供了一层代码,允许链接器解析外部引用。实际工作代码包含在MSVCR100.DLL中,该代码必须在运行时可用于与MSVCRT.lib链接的应用程序。
答案 3 :(得分:1)
你是否遇到与这个家伙相同的问题? Side-by-side assemblies, Windows 7, and Visual Studio 2005