1

サブディレクトリ内の .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 にロードするにはどうすればよいですか?

4

0 に答える 0