应用程序无法启动,因为并行配置不正确。

3

你好,我使用Visual Studio通过C++创建了一个exe文件。我创建了一个COM组件,用于发现特定机器上所有SQL Server的实例。现在,在C++程序中,我编写了main()并消耗了COM组件。

现在它应该在我的两台W2K3机器上运行。但是当我尝试在W2K8机器上运行相同的程序时,出现了以下错误:

"the application has failed to start because the side by side configauration is incorrect and for details see the application event error log"

我打开了应用程序错误日志,并发现以下错误:

"Activation context generation failed for "E:\SQLDiscovery.exe". Dependent Assembly Microsoft.VC80.DebugCRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50608.0" could not be found. Please use sxstrace.exe for detailed diagnosis."

请问如何解决这个问题?请帮忙。

3个回答

6
您需要在W2k8上安装VC8运行时,这是由于Windows Side by Side配置引起的。当您构建一个EXE文件时,会生成一个特殊的文件叫做“清单”,该清单文件描述了应用程序所需的C运行时库的版本,以便正确运行。
然后将清单嵌入到您的exe / dll中(如果您实际上使用记事本打开.dll / exe并向下滚动,您将以xml格式看到它),您还可以使用mt.exe(清单工具)查看任何可执行文件中的清单。
当您将应用程序移动到W2k8时,必须确保已安装相关的CRT(除非您静态链接了CRT)。
您可以通过以下任一方式解决此问题: 1- 安装VC8 Debug CRT 2- 将您的应用程序构建为静态链接
此外,请查看此博客http://detritus.blogs.com/lycangeek/2006/08/diagnosis_of_wi.html,其中包含有关如何调试winsxs问题的有用信息。
希望对您有所帮助。

将您的应用程序作为静态链接构建请告诉我如何做。 - Cute
1
当您在VS中构建它时,请转到项目->设置->C/C++->代码生成,并选择运行时库选项为/MTd,而不是/MDd。 - mfawzymkh
请注意,这将增加您的DLL/EXE文件的大小。 如果对您有用,请告诉我。 谢谢。 - mfawzymkh
嗨,之前运行得很好。但现在出现了新问题。它没有显示结果,而是显示以下错误:调试错误: 程序: c:\SqlDicovery.exe 此程序已请求终止运行,联系应用程序支持团队获取更多信息。如何解决这个问题? - Cute
你需要进行调试以找出失败点的调用堆栈。 当你看到断言对话框时,可以通过附加windbg或在windbg下运行应用程序来进行调试。 你可以下载windbg(Windows调试工具)。它应该很容易运行。 确保你在调试模式下构建应用程序,并复制.PDB文件,以便获得完整的符号。 - mfawzymkh
显示剩余4条评论

1
问题在于EXE需要调试CRT DLL,而它们不在2008机器上。如何解决这个问题取决于您想要/需要做什么。
如果您想使用调试CRT,请静态链接到CRT(删除在2008机器上需要DLL的需求),或者在与EXE相同的目录中创建一个名为“Microsoft.VC80.DebugCRT”的目录,并将必要的DLL和调试CRT清单文件放在那里。
调试CRT不可再分发,据我所知,除了安装所有Visual Studio之外,没有其他安装调试CRT的方法。
如果您实际上不需要调试CRT,请使用发布版本进行链接。同样,您需要选择静态LIB和DLL版本之间。好消息是发布CRT是可再分发的,请检查您的Visual Studio安装目录中的vcredist_x86.exe。

1
  1. 不要发布调试构建版本。以发行版的形式构建程序,把它放到目标计算机上。
  2. 如果您使用CRT(您确实使用了),那么需要安装CRT可再发行组件。您需要在目标计算机上安装与编译应用程序所使用的编译器版本和SP相匹配的组件。这是非常简单和标准的做法。

这里是一个链接,您可以在其中获取VC8的可再发行组件:link 而这个链接则是VC8 SP1的可再发行组件:link text

只需在Google上搜索“vc8 redist”或您正在使用的其他版本,即可找到其下载方式。

  1. 不要仅仅为了避免安装可再发行组件而静态链接您的应用程序。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接