Замена файла политики Microsoft.VC90.CRT WinSxS локальным файлом конфигурации

В Windows XP у меня есть.exe, который работает с msvcp90.dll, msvcr90.dll, а также Microsoft.VC90.CRT.manifest в моем локальном каталоге приложений. У меня также есть файл политики для этих.dll в C:\WINDOWS\WinSxS\Policies, который был установлен распространяемым пакетом Visual C++ 2008 SP1. Я хотел бы удалить этот файл политики и использовать вместо этого файл конфигурации приложения в моем локальном каталоге. Файл политики:

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <assemblyIdentity type="win32-policy" name="policy.9.0.Microsoft.VC90.CRT" version="9.0.30729.1" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"/>
    <dependency>
        <dependentAssembly>
            <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"/>
            <bindingRedirect oldVersion="9.0.20718.0-9.0.21022.8" newVersion="9.0.30729.1"/>
            <bindingRedirect oldVersion="9.0.30201.0-9.0.30729.1" newVersion="9.0.30729.1"/>
        </dependentAssembly>
    </dependency>
</assembly>

Мой конфигурационный файл:

<configuration>
    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
            <dependentAssembly>
                <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"/>
                <bindingRedirect oldVersion="9.0.20718.0-9.0.21022.8" newVersion="9.0.30729.1"/>
                <bindingRedirect oldVersion="9.0.30201.0-9.0.30729.1" newVersion="9.0.30729.1"/>
            </dependentAssembly>
        </assemblyBinding>
    </runtime>
</configuration>

Dependency Walker сообщает о параллельных ошибках при использовании файла конфигурации вместо файла политики - что не так? Кроме того, если файл конфигурации будет назван <application>.exe.config, или же Microsoft.VC90.CRT.config?

(Для пояснения при использовании файла политики ошибок не возникает. Однако клиенту здесь не разрешается устанавливать распространяемый пакет.

Документы MSDN утверждают, что файл конфигурации приложения может перенаправить приложение на использование разных версий одной и той же сборки ( конфигурация для каждого приложения) и может при необходимости переопределять существующий файл политики (конфигурация издателя). Поэтому я думаю, что должно быть возможно использовать локальный файл конфигурации приложения, и что-то в файле выше отсутствует или неверно.)

2 ответа

Ваши данные конфигурации находятся под <runtime> узел. Вместо этого он должен быть под <windows> узел.

Я должен предупредить, что отправка файлов конфигурации приложения, содержащих перенаправления привязки, крайне нежелательна и предназначена для системных администраторов, имеющих дело с проблемой appcompat на машинах, которые они администрируют. Вместо этого разработчики приложений должны создавать свои приложения для работы с последней версией конкретной версии CRT, от которой они зависят, и использовать глобальную политику по умолчанию, поставляемую с этой версией.

Фактически, начиная с Windows 2003, использование перенаправлений привязки в файле конфигурации приложения требует записи в базе данных совместимости приложений.

Насколько я понимаю, время выполнения c не может быть перенаправлено таким образом из соображений безопасности. Вы можете статически встраивать среды выполнения в ваш проект или загружать библиотеки DLL из каталога приложения без использования системы Side-By-Side.

Другие вопросы по тегам