我正在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位,并试图检查程序文件下的dll,而不是Program x86。因此,我在Verify digital signature within system32/drivers folder上跟踪了答案,并试图禁用FS重定向,但这并没有帮助。
我确信这个问题与重定向有某种关系,因为我
更新:
这是禁用重定向的代码:
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);发布于 2012-10-10 14:02:40
我想出来了-问题是文件路径中有一个额外的空间。在32位和64位中获取文件路径的代码是不同的,这就是为什么它在编译为64位时没有再现的原因。所以这和重定向无关..。
https://stackoverflow.com/questions/12815676
复制相似问题