按应用程序配置

每个应用程序配置将特定应用程序的依赖性从并行程序集的一个版本重定向到程序集的另一个版本。 如果特定应用程序的正确操作需要不同于通常指定为 默认配置发布服务器配置的版本的程序集版本,则每个应用程序配置可能变得必要。 例如,发布者对程序集版本的全局更新可能会修复程序集,但会中断此特定应用程序。 在这种情况下,可以使用每个应用程序配置使应用程序能够继续使用以前的程序集版本运行。

从 Windows Server 2003 开始,每个应用程序配置始终基于每个应用程序替代默认配置。 仅当应用程序配置文件publisherPolicy 中指定 apply=“no”且应用程序兼容性数据库中存在相应的条目时,按应用程序配置才按应用程序替代发布服务器配置

注意

Windows XP 时,每个应用程序配置会基于每个应用程序替代默认配置发布服务器配置。 有关详细信息,请参阅 Windows XP 上的按应用程序配置

 

从 Windows Server 2003 开始,如果应用程序配置文件publisherPolicy 中指定 apply=“yes”,并且为应用程序兼容性数据库中的应用程序设置 EnableAppConfig 标志,则每个应用程序配置将替代发布服务器配置。 使用按应用程序配置替代发布者配置的功能使应用程序能够在 Safemode 中运行。 有关应用程序兼容性数据库和安全模式的详细信息,请参阅Windows应用程序兼容性Toolkit。 可以从中获取Windows应用程序兼容性Toolkithttps://www.microsoft.com/downloads

注意

如果使用应用程序配置文件 (.config 文件) 在 publisherPolicy 中指定 apply=“no”的组件,这将导致生成激活上下文失败。 如果在 publisherPolicy 中提供指定 apply=“yes”.config文件的组件,则会忽略每个应用程序配置。

 

应用程序管理员可以通过创作和安装应用程序配置文件和更新应用程序兼容性数据库来实现每个应用程序配置。 然后,应将应用程序配置文件部署并安装到应用程序可执行文件所在的同一文件夹中。 有关文件架构的列表,请参阅 应用程序配置文件架构。 应用程序兼容性数据库必须按应用程序兼容性Toolkit中所述进行分发。

注意

如果应用程序在 Safemode 中运行,则它不会收到任何重要的安全修复或 bug 修复,程序集的发布者可能会作为发布者配置文件发出问题。 因此,使用按应用程序配置的应用程序可能仍然不安全或即使在将具有这些修补程序的新程序集应用于系统后仍无法正常工作。 出于此原因,应用程序开发人员绝不应使用按应用程序配置交付应用程序。 仅当应用程序被发布者配置损坏时,企业管理员才应使用按应用程序配置作为临时修复。 在这种情况下,永久性解决方案是程序集的开发人员和应用程序的开发人员需要协同工作,以确保具有发布者配置的程序集完全向后兼容。

 

下面是应用程序配置文件的示例。 有关详细信息,请参阅应用程序配置文件。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<configuration>
 <windows>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
   <assemblyIdentity  processorArchitecture="X86" name="Microsoft.Windows.mysampleApp" type="win32" version="1.0.0.0"/>
   <publisherPolicy apply="no"/>                     
   <dependentAssembly>
    <assemblyIdentity type="win32" processorArchitecture="x86" name="Microsoft.Windows.SampleAssembly" publicKeyToken="0000000000000000"/>
    <bindingRedirect oldVersion="2.0.0.0" newVersion="2.0.1.0"/>
   </dependentAssembly>
  </assemblyBinding>
 </windows>
</configuration>

应用程序管理员应将所需的条目添加到应用程序兼容性数据库。 从https://www.microsoft.com/downloads中下载并安装 Windows 应用程序兼容性Toolkit 2.6。 使用工具包中所述的兼容性管理员创建新的自定义数据库或更新现有数据库。 要为应用程序的兼容性层选择的兼容性修补程序为 EnableAppConfig。 安装新的兼容性数据库之前,必须始终测试应用程序。