3

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でWindows7のアプリケーションフォルダーからuser32.dllをロードするにはどうすればよいですか?MSDNのドキュメントでは、アセンブリの動作方法に関するプラットフォーム間の違いについては言及されていませんが、リダイレクトの動作を妨げるいくつかの違いがあるはずです...

何か案は?

4

1 に答える 1

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 マニフェストが Windows 7 で動作しない

于 2013-01-03T13:48:43.200 に答える