我正在创建一个实用程序库,可在 Web 环境中的桌面环境中使用。
它包含几个我认为在我的应用程序中经常重复的功能,包括通过文件内容(而不是扩展名)获取文件的 mime 类型的实用程序。
我必须检查的文件是最常见的(jpg、png、pdf、txt),所以我选择使用外部方法FindMimeFromData
(上面的链接)
使用 .NET,如何根据文件签名而不是扩展名找到文件的 mime 类型
该方法效果很好,除了 JPG ( image/pjpg
) 和 PNG ( image/x-png
) 这两种不正确的 mime 类型,通过在 return 语句之前进行检查很容易解决。
该库是为平台 AnyCPU 编译的,因为它必须安装在 32 位和 64 位的服务器/客户端上。
在桌面环境中进行测试时,所有为 x86 和 x64 编译的应用程序都可以正常工作。
在测试 ASP.NET 应用程序(一个带有用于测试的 http 处理程序的空站点)时,出现 HRESULT 类型的错误,调试器告诉我它无法提供更多信息。
经过一些测试配置,包括将池的身份更改为本地系统(没有结果),我发现了问题:
池应该允许 32 位应用程序(见上图)。
为什么?
是不是应该加载urlmon.dll
我们现在所在的64位系统的dll?
这是一个大问题,因为该FindMimeFromData
方法可以在这个库的任何地方调用:
结果是另一个实用程序方法调用此方法可能会引发此异常,并且很难通过调试来跟踪问题。
有什么想法/经验吗?
用于测试的操作系统
桌面:
- Windows 8 x64 -工作
- Windows 7 x64 -工作
- Windows Server 2008 Standard R2 x64 -有效
- Windows Server 2008 标准 x86 -有效
- Windows Server 2003 标准 x86 -有效
- Windows XP Professional SP3 -有效
网站:
- Windows 8 x64 -发现第一个错误,仅适用于启用 32 位应用程序
- Windows Server 2008 Standard R2 x64 -已确认错误,仅适用于启用 32 位应用程序
- Windows Server 2008 标准 x86 -有效
编辑2(问题已解决)
由Noseratio解决:
正确的参数类型ppwzMimeOut
并且pBC
必须是System.IntPtr
代替System.UInt32
.
我知道这System.UInt32
会导致完整的 64 位网络应用出现问题,但我不知道为什么。
如果有人知道这些问题的原因,可以在评论中更好地解释吗?
提前致谢