按应用程序配置

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

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

注意

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

 

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

注意

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

 

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

注意

如果应用程序在 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 应用程序兼容性工具包 2.6。 使用工具包中所述的兼容性管理员创建新的自定义数据库或更新现有数据库。 要为应用程序的兼容性层选择的兼容性修补程序是 EnableAppConfig。 在安装新的兼容性数据库之前,必须始终测试应用程序。