Исправление существующего приложения с помощью частной сборки
Начиная с Windows XP можно создать частную сборку и сделать ее доступной для определенного приложения. Эту возможность можно использовать для исправления приложения, которое становится несовместимым с обновлением. Примером может быть приложение, которое становится несовместимым с последней версией MSVCRT.DLL после обновления операционной системы. В этом случае вы не можете заменить версию системы, так как MSVCRT.DLL является защищенным файлом Windows. Вместо того, чтобы переписывать приложение для работы с новой версией MSVCRT, можно создать частную сборку для MSVCRT и установить ее в папку приложения. Обратите внимание, что не каждый общий компонент является подходящим кандидатом для частной параллельной сборки, и некоторые компоненты имеют ограничения на лицензирование, касающиеся того, где можно установить их компоненты. Компонент должен соответствовать критериям для параллельного компонента. Попросите издателя компонента предоставить подходящую сборку.
Манифест частной сборки и манифест приложения должны быть установлены в той же папке, что и исполняемый файл приложения. При запуске приложение обращается к манифесту приложения и загружает версию MSVCRT, которая является закрытой для приложения.
В этом примере частная сборка будет включать как MSVCRT.DLL, так и MSVCIRT.DLL, как показано в следующем манифесте сборки:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity type="win32"
name="Microsoft.Windows.PrivateCPlusPlusRuntime"
version="6.0.0.0"
processorArchitecture="x86"/>
<file name="msvcrt.dll"/>
<file name="msvcirt.dll"/>
</assembly>
Ниже приведен пример возможного манифеста приложения.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
version="1.0.0.0"
processorArchitecture="x86"
name="APPLICATION"
type="win32"
/>
<description>Description of Application</description>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.PrivateCPlusPlusRuntime"
version="6.0.0.0"
processorArchitecture="x86"/>
</dependentAssembly>
</dependency>
</assembly>