我正在使用 .Net 4 组件,该组件使用子目录中的 .manifest 文件创建激活上下文(通过互操作)。
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/lib.dll,而不是 AppDir/SubDir/lib.dll
我已经通过 ProcMon 验证了这一点。如果我将 SubDir 中的所有内容复制到 AppDir 并指向 AppDir/lib.manifest,它在 XP 即当前目录中工作正常。
我需要做什么才能使 XP 在 SubDir 中加载 lib.dll?