【问题标题】:Different WinSxS behaviour in Windows 7 and Windows Server 2008 R2Windows 7 和 Windows Server 2008 R2 中不同的 WinSxS 行为
【发布时间】:2011-08-29 19:38:39
【问题描述】:

我有一个可执行文件,它的清单说它取决于

Microsoft.VC90.CRT 9.0.21022.8
Microsoft.VC90.CRT 9.0.30729.1

在 Windows 7 上,此可执行文件可以正常运行。 在 Windows Server 2008 R2 上,此可执行文件无法运行并显示以下消息:

应用程序无法启动,因为它的并排配置不正确。请查看应用程序事件日志或使用命令行 sxstrace.exe 工具了解更多详细信息。

这出乎意料 - 我认为 Windows 7 和 Windows Server 2008 R2 在运行时可用性方面应该非常相似。两台机器都很干净。 Windows 7 机器是全新安装的,上面没有任何内容。 Windows Server 2008 R2 机器只有一些来自 Windows Update 的更新。

我检查了Windows 7机器的WinSxS目录,发现

Microsoft VC90.CRT 9.0.30729.4926

我查看了Windows Server 2008 R2机器的WinSxS目录,发现

Microsoft VC90.CRT 9.0.30729.4926

存在的运行时比清单中指定的要新,但 Windows Server 2008 R2 系统无法重定向到较新的运行时。在 Windows Server 2008 R2 上运行 sxstrace 显示:

INFO: Applying Binding Policy
    INFO: No publisher policy found.
    INFO: No binding policy redirect found.

在 Windows 7 上运行 sxstrace 会得到:

INFO: Applying Binding Policy
    INFO: Find publisher policy at C:\Windows\WinSxS\manifest\amd64...
    INFO: Publisher Policy redirected assembly version.
    INFO: Post policy assembly identity is...

除了安装 VS 2008 运行时和 VS 2008 SP1 运行时,还有什么办法可以解决这个问题?我认为程序集的整个想法是它允许系统覆盖较旧的运行时并替换较新的运行时。

【问题讨论】:

  • 我也遇到了这种情况。我比较了 Win7 和 Server 2008 R2 机器之间的 SXS 目录,它们看起来是一样的。此外,该错误似乎仅与服务器 2008 R2 无关——我在 Windows Vista、Server 2008(非 R2)、Windows 8(和 8.1)、Server 2012(和 R2)上进行了测试,这些都具有 30729 版本的 C++ 运行时,并正确重定向。只有服务器 2008 R2 有这个问题 :-(

标签: windows assemblies manifest winsxs


【解决方案1】:

虽然原则上 WinSxS 允许兼容的较新版本的程序集替换旧版本,但 VS 运行时不使用此功能,并且仅绑定到编译它们所针对的相同版本。针对相同版本的库重新编译应用程序的所有组件(可能最好,以避免多个 malloc 堆出现问题)或安装两个运行时。

【讨论】:

  • 情况似乎并非如此 - 该 exe 与 9.0.21022.8 和 9.0.30729.1 相关联,但在 WinSxS 目录中只有 9.0.30729.4926 的干净 Windows 7 机器上运行。跨度>
  • SxS 程序集具有将旧版本重定向到新版本的发布者策略——它不会自动发生。看起来 2008 R2 缺少这样的 msvc 运行时策略。
【解决方案2】:

您可以将 VC++ 运行时 dll 放在应用程序的可执行目录中,它应该可以工作。 您还需要 2 个 dll(MSVCR 和 MSVCP)和清单。在我的脑海中,只需将所有 3 个文件放在应用程序的可执行目录中就可以了

【讨论】:

  • 确保更新清单中的版本以匹配您的可执行链接所针对的版本,否则它也找不到它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-16
  • 2018-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多