Как отследить проблемы привязки SxS, которые не отображаются с sxstrace? - PullRequest
0 голосов
/ 27 ноября 2018

У меня странные проблемы с привязкой SxS.У меня есть библиотеки поставщика, которые зависят от CRT, MFC и OpenMP VC9.Первоначально эти DLL указывали на старую CRT (21022.8), но я обновил их манифесты, указав на последний выпуск (30729.6161).Мне нужны эти библиотеки DLL для работы на клиентских машинах без необходимости установки распространяемого VC9 (т.е. без установки администратора).Трудно провести тестирование на моей машине разработчика, потому что я не могу полностью избавиться от распространяемого VC9: слишком много приложений используют его (например, Все поиск, Google Backup).Я могу удалить MFC и / или OpenMP из winsxs (и сопровождающих файлов политики / манифеста).

Когда я удаляю 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 ничего мне не говорит.

Когда я отслеживаю доступ к DLL с помощью Process Monitor, я вижу, что он привязывается к VC90.CRT в winsxs (от которого я не могу избавиться, потому что он используется).Затем, не заглядывая в локальный каталог, он ищет mfc90.dll в winsxs, не находит его, затем выдает ошибку, не глядя ни в какое другое место.

Почему он так себя ведет и какЯ это исправляю?

edit: я не знаю, насколько это актуально, но DLL-библиотеки производителя основаны на COM, которые я обернул / изолировал с помощью Interop DLL.Поэтому я на самом деле получаю ошибку The program can't start только при попытке создать объект COM.

...