サブディレクトリ内の .manifest ファイルを使用して (相互運用機能を介して) アクティベーション コンテキストを作成する .Net 4 コンポーネントを使用しています。
AppDir
- App.exe (.Net 4)
- App.dll (.Net 4)
---- SubDir
-------- lib.dll (Native x86)
------- lib.manifest
activationContext = new NativeMethods.ACTCTX();
activationContext.cbSize = Marshal.SizeOf(typeof(NativeMethods.ACTCTX));
activationContext.lpSource = this.ManifestFileName;
activationContext.dwFlags = 4;
activationContext.lpAssemblyDirectory = new System.IO.FileInfo(this.ManifestFileName).Directory.FullName;
contextHandle = NativeMethods.CreateActCtx(ref activationContext);
int winError = Marshal.GetLastWin32Error();
現在のディレクトリ = AppDir
マニフェスト パス = .\SubDir\lib.manifest
Win 7 では、SubDir/lib.dll がロードされ、正常に実行されます。
Win XP では、マニフェスト ファイルは正常にロードされますが、システムは AppDir/SubDir/lib.dll ではなく、AppDir/lib.dll をロードしようとします。
これは ProcMon で確認しました。SubDir から AppDir にすべてをコピーし、AppDir/lib.manifest をポイントすると、XP、つまり現在のディレクトリで正常に動作します。
XP で lib.dll を SubDir にロードするにはどうすればよいですか?