我创建了一个简单的Win32应用程序来表明UXtheme在XP通过包括一个清单上的依赖性ver6commctl32.dll 然后我创建了一个简单的Win32dll,建它 ISOLATION_AWARE_ENABLED, 和测试,它有一个嵌入清单的指定这两个版本的5和6的Comctl32.dll

我成功得到了exe和dll使用不同版本的comctl32.dll 使用这种方法。两exe使用5和dll6个版本,和周围的其他方法。

然后,我重设程序和dll有comctl ver5清单的依赖。并引入了一个应用程序配置文件:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<configuration>
  <windows>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" processorArchitecture="amd64" publicKeyToken="6595b64144ccf1df"/>
        <bindingRedirect oldVersion="5.82.7100.0" newVersion="6.0.0.0"/>
      </dependentAssembly>
    </assemblyBinding>
  </windows>
</configuration>

现在,当我运行了我的申请,该应用程序显然正在重新定向到commctl v6对话都清楚地显示,使用XP UXTheme启用。然而,dll是不被转用于非主题ver5commctl.

没有提到的每dll配置文件的做bindingRedirects在文件。并试图建立一个没有做任何事情。

我也知道做一个取从一个主要的组件,另一个是不是一个受支持的方案,但我真的只是使用commctl32作为一个明显简单的方法来测试的机制。

我怎么向版本的依赖大会的dll?

有帮助吗?

解决方案 2

因此,这个问题已经回答。

  • 我用过程监视器追踪的文件访问,
  • 后实现访问。清单。配置文件来自csrss.exe 不我自己处理,
  • 和Windows Vista甚至不会的访问。清单。配置文件之后添加的,因为它缓存他们的存在,随着一个日期时间戳exe。

毕竟,我发现,LoadLibrary并探头。配置文件装载时dll:

full_path_to_dll\dllname.dll.2.config

绑定重定向在该文件将处理。

其他提示

  

和Windows Vista甚至不会访问.manifest的或.config文件是   后来被加入,因为它沿着缓存的存在有日期时间   标记有关的exe。

我发现,注销/上似乎清除触发器的配置文件再次被读取。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top