我有一个 .NET 4.0 库,它使用 Shell32 和 Folder.GetDetailsOf() 从 WTV 文件中获取元数据。我已经成功地将它用于控制台和 Windows 窗体应用程序,没有任何问题。但由于某种原因,当从 .NET 4.0 Windows 服务调用组件时,调用启动 Shell 类会导致 COM 错误。
库中失败的代码:
Shell32.Shell shell = new Shell();
错误:
无法将“System.__ComObject”类型的 COM 对象转换为接口(interface)类型“Shell32.Shell”。此操作失败,因为 IID 为“{286E6F1B-7113-4355-9562-96B7E9D64C54}”的接口(interface)的 COM 组件上的 QueryInterface 调用因以下错误而失败:不支持此类接口(interface)(HRESULT 异常:0x80004002 (E_NOINTERFACE)) .
我阅读了单元线程、COM Interops、动态、PIA 等等,等等 :) 但是我发现的解决方案组合没有解决问题。它必须是来自另一个看不到 Interop 的线程的调用。请帮助:)
最佳答案
我最近在使用命令行应用程序(控制台)时遇到了同样的问题。事实证明,需要使用 [STAThread]
属性注释程序的 Main()
方法。还注意到,如果入口点用 [MTAThread]
注释,它会以完全相同的方式惨败。希望对您有所帮助。
关于c# - 从 .NET Windows 服务调用 Shell32.dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14543340/