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

时间:2009-06-12 06:35:27

标签: c# c++ sql-server visual-c++ windows-server-2008

HI  我使用visualstudio通过c ++创建了一个exe。我创建了一个com componet,它发现了特定machine.now在c ++程序中使用visualstudio的所有sqlserver实例。我编写main()并使用com组件。

现在它应该在我的两个工作站上工作,这是w2k3机器。当我尝试在 w2k8机器上运行时,我得到了错误

应用程序无法启动,因为并排配置不正确,有关详细信息,请参阅应用程序事件错误日志

我打开应用程序错误日志,发现错误为

“E:\ SQLDiscovery.exe”的激活上下文生成失败。无法找到依赖程序集Microsoft.VC80.DebugCRT,processorArchitecture =“x86”,publicKeyToken =“1fc8b3b9a1e18e3b”,type =“win32”,version =“8.0.50608.0”。请使用sxstrace.exe进行详细诊断。

如何解决这个问题请帮助我

3 个答案:

答案 0 :(得分:6)

您必须在W2k8上安装VC8 Runtime。这是由于Windows并排配置。 在构建和EXE时,会生成一个名为“manifest”的特殊文件,此清单文件描述了应用程序为正确运行所需的C运行时库的版本。
然后将Manifest嵌入到您的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问题的有用信息。

希望这有帮助

答案 1 :(得分:1)

问题是EXE需要调试CRT DLL并且它们不在2008机器上。你如何解决这个问题取决于你想要/需要做什么。

如果要使用调试CRT,请静态链接到CRT(无需在2008计算机上安装DLL)或在与EXE相同的目录中创建名为“Microsoft.VC80.DebugCRT”的目录,并将必要的DLL 和调试CRT清单文件放在那里。

调试CRT不可再发行,AFAIK没有办法“安装调试CRT”而不是安装所有Visual Studio。

如果您实际上不需要调试CRT,请与发行版本链接。同样,您需要在静态LIB和DLL版本之间进行选择。好消息是发布CRT是可再发行的,请检查vcredist_x86.exe的Visual Studio安装目录。

答案 2 :(得分:1)

  1. 不发送调试版本。在发布中构建它,然后将其放在目标计算机上。
  2. 如果您使用CRT(您这样做),则需要安装CRT可再发行组件。您需要安装(在目标计算机上)与版本和版本匹配的那些。用于构建应用程序的编译器的SP。这很简单&标准做法
  3. 这是一个链接,您可以在其中获取VC8的redists:link 这里是VC8 SP1的redists链接:link text

    只需谷歌“vc8 redist”或您使用的任何版本,您都会找到自己的方式。

    1. 请勿静态链接您的应用,以避免必须安装redists。