Различное поведение WinSxS в Windows 7 и Windows Server 2008 R2 - PullRequest
3 голосов
/ 20 мая 2011

У меня есть исполняемый файл, который в манифесте говорит, что это зависит от

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.

Я проверил каталог WinSxS на Windows 7 и обнаружил

Microsoft VC90.CRT 9.0.30729.4926

Я проверил каталог WinSxS на компьютере под управлением Windows Server 2008 R2 и обнаружил

Microsoft VC90.CRT 9.0.30729.4926

Имеющаяся среда выполнения новее, чем указано в манифесте, и, тем не менее, система Windows Server 2008 R2 не может перенаправить на более новую среду выполнения. Запуск sxstrace в Windows Server 2008 R2 показывает:

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

Запуск sxstrace в Windows 7 дает:

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 и среды выполнения SP 2008 SP1? Я думал, что вся идея сборок заключается в том, что она позволяет системе переопределять старые среды выполнения и заменять более новые.

Ответы [ 2 ]

0 голосов
/ 22 апреля 2014

Вы можете поместить библиотеки времени выполнения VC ++ в каталог исполняемых файлов вашего приложения, и оно должно работать.Вам понадобятся 2 dll (MSVCR и MSVCP), а также манифест.Сверх того, просто положив все 3 из этих файлов в каталог исполняемых файлов приложения, нужно добиться цели

0 голосов
/ 22 мая 2011

Хотя в принципе WinSxS позволяет совместимым более новым версиям сборок заменять более старые версии, среды выполнения VS не используют эту функциональность и привязываются только к той же версии, с которой они были скомпилированы. Либо перекомпилируйте все компоненты вашего приложения для одной и той же версии библиотеки (возможно, лучше, чтобы избежать проблем с несколькими кучами malloc), либо установите обе среды выполнения.

...