DLL重定向 - 在XP中工作,而不是在Windows 7中工作

时间:2013-01-03 09:33:26

标签: windows dll manifest

在Windows XP上,我正在为指定的应用程序重定向user32.dll,但在Windows 7上使用相同的设置,不会重定向user32.dll。

设置就是这个 - 包含以下内容的目录:

  

APP.EXE
  app.exe.manifest
  USER32.DLL

app.exe.manifest包含:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <assemblyIdentity
    version="0.0.0.0"
    name="Redirection"
    type="win32"
  />

  <file
    name="user32.dll"
  />
</assembly>

在Windows XP上,app.exe从应用程序文件夹中加载user32.dll。在Windows 7上,app.exe从system32文件夹加载user32.dll。

如何让app.exe从Windows 7上的应用程序文件夹加载user32.dll? MSDN docs没有提到平台之间在程序集工作方式上的任何差异,但必须有一些区别才能阻止重定向工作......

有什么想法吗?

1 个答案:

答案 0 :(得分:4)

事实证明,Vista以后的Windows平台会进行一些激活上下文缓存,即第一次运行应用程序时会查找清单。如果在第一次运行后添加或更改清单,则Windows无需查找它以节省加载时间。

所以我的方案确实有效,但您需要强制Windows通过修改应用程序二进制文件(例如时间戳)来重新缓存激活上下文。

我试过了,我的user32.dll是从应用程序目录加载到Windows 7中的。

参考文献:
http://blogs.msdn.com/b/vistacompatteam/archive/2006/11/13/manifest-and-the-fusion-cache.aspx
VB6 Manifest not working on Windows 7