如何跟踪sxstrace未显示的SxS绑定问题?

时间:2018-11-27 16:36:00

标签: windows dll mfc winsxs

我对SxS绑定有一些奇怪的问题。我有依赖VC9的CRT,MFC和OpenMP的供应商DLL。这些DLL最初指向旧的CRT(21022.8),但我更新了它们的清单以指向最新的版本(30729.6161)。我需要这些DLL在客户端计算机上运行而无需安装VC9可再发行组件(即非管理员安装)。在我的开发人员机器上进行测试非常困难,因为我无法完全摆脱可再发行的VC9:正在使用太多的应用程序(例如,一切搜索,Google备份)。我可以从winsxs中删除MFC和/或OpenMP(以及随附的策略/清单文件)。

删除OpenMP时,出现事件查看器中显示的SxS配置错误,可以使用sxstrace.exe进行跟踪。这样做导致我将Microsoft.VC90.OpenMP.manifest文件与vcomp90.dll一起放在了我的应用程序旁边,这使该应用程序可以使用本地OpenMP。

但是当我删除MFC时,没有出现并行错误。相反,我看到一个弹出对话框,提示The program can't start because mfc90.dll is missing from computer.。即使在为我的应用程序提供了Microsoft.VC90.MFC.manifest文件之后,它也找不到位于可执行文件旁边的mfc90.dll。由于不是并行错误,sxstrace.exe不会告诉我任何事情。

当我使用Process Monitor监视DLL访问时,我发现它绑定到winsxs中的VC90.CRT(由于正在使用中,我无法摆脱它)。然后,不查找本地目录,而是在winsxs中查找mfc90.dll,找不到它,然后给出错误而不在任何其他位置查找。

为什么会这样,我该如何解决?

edit:我不知道它是否相关,但是供应商DLL是基于COM的,我已经使用Interop DLL对其进行了包装/隔离。因此,实际上,当它尝试创建COM对象时,只会出现The program can't start错误。

0 个答案:

没有答案