侧边栏配置不正确






4.86/5 (19投票s)
应用程序启动失败,因为侧边栏配置不正确。
入门
大多数在应用程序中使用程序集的开发人员可能都遇到过这个问题。在启动应用程序时,我们可能会收到一个错误:“由于其并行配置不正确,此应用程序无法启动”。
引言
并行配置是一种文件版本控制技巧,其中多个文件版本安装在同一台计算机上。这是通过清单文件实现的。例如:C 运行时库程序集包含三个 DLL 文件 — msvcr80.dll、msvcm80.dll 和 msvcp80.dll — 当应用程序使用 CRT 库中的函数构建时,应用程序会使用它们。并行技术也称为 WinSxS 或 SxS。
什么是并行配置?
并行程序集包含一组资源 — 一组 DLL、Windows 类、COM 服务器、类型库或接口 — 这些资源始终一起提供给应用程序。这些在程序集清单中进行了描述。
为什么它很重要?
在许多情况下,可以在不更改应用程序代码的情况下更新现有应用程序以使用并行程序集。鼓励开发人员使用并行程序集创建隔离的应用程序,并出于以下原因将现有应用程序更新为隔离应用程序:
- 并行程序集减少了 DLL 版本冲突的可能性。
- 并行程序集共享支持多个版本的 COM 或 Windows 程序集同时运行。
- 部署后,应用程序和管理员可以在全局或每个应用程序配置的基础上更新程序集配置。例如,可以在不重新安装应用程序的情况下更新应用程序以使用包含更新的并行程序集。
它是如何工作的?
在上面图片所示的示例中,Comctl32.DLL 版本 6.0 和 Comctl32.DLL 版本 5.0 都位于并行程序集缓存中,可供应用程序使用。当应用程序调用加载 DLL 时,并行管理器会确定应用程序是否具有清单中描述的版本依赖项。如果没有相关清单,系统会加载程序集的默认版本。对于 Windows XP,Comctl32.DLL 的版本 5.0 是系统默认值。如果并行管理器在清单中找到对版本 6.0 的依赖项,则加载该版本以与应用程序一起运行。
这与项目设置有关吗?
我们需要检查是否可以通过项目设置来解决,因为 EXE 将在调试版本中运行,而在发布版本中启动失败。将项目设置更改为不使用运行时库,但这会使输出的 EXE 文件变大。(项目属性 -> C/C++ -> 代码生成 -> 运行时库 -> 根据当前配置使用/MT 或 /MTd。)这可能有效,但不是解决此问题的办法。
这是操作系统相关问题吗?
否,这不是操作系统相关问题。由于此问题的大部分体验都在 Vista 上,所以最初我以为只在 Vista 计算机上。只要 Sxs 文件夹中缺少引用的程序集,并行错误就会出现,与操作系统无关。
解决方案是什么?
现在我们需要考虑解决方案。由于错误消息本身说“请检查 Windows 事件查看器以获取更多信息”。转到事件查看器并查找与 sidebyside 相关的条目。这里我们举一个例子:
“生成“DataViewer.dll”的激活上下文失败。找不到依赖程序集 Microsoft.VC90.MFC,processorArchitecture=“x86”,publicKeyToken=“1fc8b3b9a1e18e3b”,type=“win32”,version=“9.0.21022.8”。请使用 sxstrace.exe 进行详细诊断。”
这里我们清楚知道缺少什么。我们缺少 Microsoft.VC90.MFC 的 9.0.21022.8 版本。你可以转到 C:\Windows\WinSxs 文件夹并手动验证此依赖程序集是否存在。由于我们缺少程序集,唯一的解决方案是引用程序集必须存在于我们运行应用程序的计算机上。由于我们需要将依赖程序集安装到客户端计算机,因此需要将所需程序集的 Microsoft 可再发行包运行到客户端计算机上。有关下载程序的补丁,请参阅网站部分。
Sxstrace.exe 工具是否有用?
此工具可帮助我们进行详细诊断,例如程序集探测步骤。它还可以帮助我们识别应用程序已有的和已加载的先前版本,以及它当前正在哪个文件夹中搜索。
如何使用 sxstrace.exe?
要运行 sxstrace.exe,请转到 Visual Studio 命令提示符并键入 sxstrace.exe。用法如下:
- 在运行应用程序之前,在跟踪模式下运行
sxstrace
sxstrace.exe Trace -logfile:C:\tmp\MySxSTrace.log - 通过启动应用程序重现错误
- 现在使用以下命令停止跟踪 sxstrace.exe Parse -logfile:C:\tmp\MySxSTrace.log -outfile:C:\tmp\MySxSTrace.txt
- 从 C:\tmp\MySxSTrace.txt 打开输出文件
补丁网站
- http://www.microsoft.com/downloads/details.aspx?familyid=2051A0C1-C9B5-4B0A-A8F5-770A549FD78C&displaylang=en#top (Visual Studio 2008)
- http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=766a6af7-ec73-40ff-b072-9112bab119c2 (Visual Studio 2005)
- http://www.microsoft.com/technet/security/bulletin/MS09-035.mspx
结论
并行配置错误是由于 winsxs 文件夹中缺少引用的程序集引起的。此问题没有代码更改,我们可以将所需的补丁安装到客户端计算机,然后重新启动 PC 即可解决此问题。
历史
- 2009 年 11 月 11 日:初次发布