2013-01-03 167 views
3

在Windows XP上,我將user32.dll重定向到指定的應用程序,但在Windows 7上使用相同的設置,user32.dll未重定向。DLL重定向 - 在XP中工作,而不是在Windows 7中

的設置是這樣的 - 含有目錄:

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

有額外的間接層Win7上的EXT-MS-雙贏xxx.dll存根系統DLL。部分遠程項目打破Windows dll之間的依賴關係。重定向系統DLL將會流淚,很快就會開始在虛擬機中運行此應用程序。 –

回答

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

+1

這仍然適用於Windows 10.幫助了我很多,謝謝! – Mark

相關問題