Shell32とFolder.GetDetailsOf()を使用してWTVファイルからメタデータを取得する.NET 4.0ライブラリがあります。私は問題なくConsoleとWindows Formsのアプリケーションでうまく使用しました。しかし、何らかの理由で、.NET 4.0 Windowsサービスからコンポーネントを呼び出すときに、Shellクラスを開始する呼び出しでCOMエラーが発生します。.NET WindowsサービスからShell32.dllを呼び出す
ライブラリ内部失敗コード:
Shell32.Shellシェル=新しいシェル()。
エラー:
'Shell32.Shell' タイプのインタフェースにタイプ 'システム.__ ComObject' ののCOMオブジェクトをキャストすることができません。次のエラーのため、IID '{286E6F1B-7113-4355-9562-96B7E9D64C54}'のインターフェイスのCOMコンポーネントのQueryInterface呼び出しが失敗したため、この操作は失敗しました:このようなインターフェイスはサポートされていません(HRESULT:0x80004002(E_NOINTERFACE)例外) 。
アパートメントスレッド、COM相互運用機能、ダイナミック、PIA's、etc、etcなどの内容を読みました:)しかし、私が見つけたソリューションの組み合わせは問題を解決していません。 Interopを見ることができない別のスレッドからの呼び出しでなければなりません。助けてください:)
私はあなたに許可の問題について同意します。 +1 – FrostyFire
+1ですが、[MSDN](http://msdn.microsoft.com/en-us/library/windows/desktop/ms683502%28v=vs.85%29.aspx)によると、Vista以上サービスはデスクトップと全く(直接的に、とにかく)対話できません。リンクされたページから: "**重要**サービスはWindows Vistaのようにユーザーと直接対話できません。"私はそのような場合に「デフォルトで」と言っているかどうかはわかりません。 :-) –
@KenWhite:Windows 8をチェックしただけですが、このチェックボックスはまだ有効です。私は、ログインしているユーザーに属するデスクトップと対話できないことを指摘していると思います。しかし、私はその権限を持つサービスはまだ自分の*デスクトップセッションを取得すると思います。 –