在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没有提到平台之间在程序集工作方式上的任何差异,但必须有一些区别才能阻止重定向工作......
有什么想法吗?
答案 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