c# - 从 .NET Windows 服务调用 Shell32.dll

标签 c# .net multithreading com shell32

我有一个 .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/

相关文章:

c# - 如何跟踪 (List<T>) 集合是否被修改?

c# - 如何将并发包转换为列表?

multithreading - 使用 tkinter + pyhook 时卡住。两个事件循环和多线程

multithreading - Haskell 中 ConcurrentHashMap 的类比是什么?

c# - LINQ 实体结果到 List<string>

c# - 如何检查 var 的空值?

c# - 仅在模型的特定部分检查 "ModelState.IsValid"

java - Java 中的线程

javascript - 如何在页面加载时在 HtmlEditorExtender 中设置内容

c# - C# 中的可空双 NaN 比较