Замена файла политики Microsoft.VC90.CRT WinSxS локальным файлом конфигурации - PullRequest
2 голосов
/ 22 сентября 2011

В 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 ]

2 голосов
/ 02 декабря 2011

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

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

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

0 голосов
/ 27 сентября 2011

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

...