У меня есть библиотека .NET 4.0, которая использует Shell32 и Folder.GetDetailsOf() для получения метаданных из файлов WTV. Я успешно использовал его с консольными и Windows Forms приложениями без проблем. Но по какой-то причине при вызове компонента из .NET 4.0 службы Windows вызов инициировать класс оболочки вызывает ошибку COM.Вызов Shell32.dll из службы .NET Windows
Код, который терпит неудачу в библиотеке:
Shell32.Shell оболочки = новый Shell();
Ошибка:
Невозможно бросить COM объект типа 'System .__ ComObject' для взаимодействия типа 'Shell32.Shell'. Эта операция завершилась неудачно, потому что вызов QueryInterface для COM-компонента для интерфейса с IID '{286E6F1B-7113-4355-9562-96B7E9D64C54} завершился неудачно из-за следующей ошибки: такой интерфейс не поддерживается (исключение из HRESULT: 0x80004002 (E_NOINTERFACE)) ,
Я прочитал, что заполнял Thread Threading, COM Interops, Dynamic, PIA и т. Д. И т. Д. :). Но ни одна комбинация решений, которые я нашел, не решила проблему. Это должен быть вызов из другого потока, который не может видеть 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, и этот флажок, чтобы разрешить взаимодействие, все еще существует. Я думаю, что это означает, что вы не можете взаимодействовать с рабочим столом, принадлежащим зарегистрированному пользователю. Тем не менее, я думаю, что службы с таким разрешением все еще получают свою * собственную сессию рабочего стола. –