我正在使用C#.net 3.5并在64位平台上运行。
我有一个32位的dll,我需要动态加载。 该DLL位于“C:\ Program files \ ApplicationToLoad \ Application.dll”
下因为dll是32位我必须将我的应用程序编译为32位。
在加载dll之前,我检查dll是否使用WinVerifyTrust签名,但是我收到错误0x80092003 = CRYPT_E_FILE_ERROR =读取或写入文件时发生错误。
我猜测会发生这种情况,因为我编译为32位并尝试检查Program Files下的dll而不是Program Files x86。所以我按照Verify digital signature within system32/drivers folder的答案,尝试禁用FS重定向,但没有帮助。
我很确定这个问题在某种程度上与重定向有关,因为我
在“program Files(x86)”下创建了ApplicationToLoad文件夹的副本 - WinVerifyTrust返回状态OK
将我的应用程序编译为64位 - WinVerifyTrust返回状态确定
更新
这是禁用重定向的代码:
IntPtr ptr = new IntPtr();
Wow64DisableWow64FsRedirection(ref ptr);
var lStatus = WinVerifyTrust(
IntPtr.Zero,
pGuid,
pData);
Wow64RevertWow64FsRedirection(ptr);
pinvoke声明:
[DllImport("kernel32.dll", SetLastError = true)]
public static extern bool Wow64DisableWow64FsRedirection(ref IntPtr ptr);
[DllImport("kernel32.dll", SetLastError = true)]
public static extern bool Wow64RevertWow64FsRedirection(IntPtr ptr);
答案 0 :(得分:0)
我弄清楚了 - 问题是文件路径中有一个额外的空间。获取32位和64位文件路径的代码是不同的,这就是为什么它在编译为64位时不能重现的原因。 所以它与重定向无关......