Mam bibliotekę .NET 4.0, która używa Shell32 i Folder.GetDetailsOf() do pobierania metadanych z plików WTV. Użyłem go z powodzeniem w aplikacjach Console i Windows Forms bez problemu. Ale z jakiegoś powodu, wywołując komponent z usługi .NET 4.0 systemu Windows, wywołanie zainicjowania klasy powłoki powoduje błąd COM.Wywołanie powłoki Shell32.dll z usługi .NET systemu Windows
kod, który nie wewnątrz Biblioteka:
Shell32.Shell powłoki = nowa powłoka();
Błąd:
Nie można rzutować obiektu COM typu 'system .__ ComObject' do interfejsu typu 'Shell32.Shell'. Ta operacja nie powiodła się, ponieważ wywołanie QueryInterface na komponencie COM interfejsu z IID "{286E6F1B-7113-4355-9562-96B7E9D64C54}" nie powiodło się z powodu następującego błędu: Brak takiego interfejsu obsługiwanego (Wyjątek od HRESULT: 0x80004002 (E_NOINTERFACE)) .
Przeczytałem moje wypełnienie mieszkania wątków, COM Interops, Dynamic, PIA, itp., Itp. Ale żadna kombinacja rozwiązań, które znalazłem, nie rozwiązała problemu. To musi być połączenie z innego wątku, który nie widzi Interopu. Pomoc, proszę :)
Zgadzam się z Państwem w sprawie problemu z pozwoleniem. +1 – FrostyFire
+1, ale zgodnie z [MSDN] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms683502%28v=vs.85%29.aspx), w systemie Vista i nowszym usługi nie mogą w ogóle wchodzić w interakcje z pulpitem (bezpośrednio, tak czy inaczej). Ze strony połączonej: "** Ważne ** Usługi nie mogą bezpośrednio wchodzić w interakcję z użytkownikiem od wersji Windows Vista.". Nie jestem pewien, czy powiedziałbym "domyślnie" w takim przypadku. :-) –
@KenWhite: Właśnie sprawdziłem Windows 8 i to pole wyboru, aby umożliwić interakcję nadal tam jest. Myślę, że to oznacza brak możliwości interakcji z pulpitem należącym do zalogowanego użytkownika. Sądzę jednak, że usługi z tym uprawnieniem nadal mają swoją * własną * sesję pulpitu. –