W32 dosyalarından meta veriler almak için Shell32 ve Folder.GetDetailsOf() kullanan bir .NET 4.0 kitaplığım var. Sorunu olmadan Konsol ve Windows Forms uygulamaları ile başarıyla kullandım. Ancak, bazı nedenlerle, bileşeni .NET 4.0 Windows Service'ten çağırarak, Shell sınıfını başlatma çağrısı bir COM hatasına neden olur.Shell32.dll dosyasını .NET Windows Service'den Çağırma
kütüphane içinde başarısız kodu:
Shell32.Shell kabuk = yeni Shell();
hatası:
'Shell32.Shell' tür arabirim türü 'Sistem .__ comNesne' COM nesnesi döküm edilemiyor. IID '{286E6F1B-7113-4355-9562-96B7E9D64C54}' ile arabirimin COM bileşenindeki QueryInterface çağrısı, aşağıdaki hata nedeniyle başarısız olduğundan bu işlem başarısız oldu: Böyle bir arabirim desteklenmedi (HRESULT özel durum: 0x80004002 (E_NOINTERFACE)) .
Dairelerdeki Threading, COM Interops, Dynamic, PIA, vb., Vb. Dolumlarımı okudum. Ama bulduğum çözümlerin hiçbiri problemi çözmedi. Interop'u göremeyen başka bir ileti dizisinden olmalı. Yardım, lütfen :)
İzin sorunu konusunda size katılıyorum. +1 – FrostyFire
+1, ancak [MSDN] 'ye göre (http://msdn.microsoft.com/en-us/library/windows/desktop/ms683502%28v=vs.85%29.aspx), Vista ve üstü Hizmetler hiç masaüstüyle etkileşime giremez (her halükarda). Bağlantılı sayfadan: "** Önemli ** Hizmetler, Windows Vista'dan biriyle doğrudan etkileşim kuramıyor." Bu durumda "varsayılan olarak" diyeceğimden emin değilim. :-) –
@KenWhite: Sadece Windows 8'i işaretlediniz ve etkileşime izin veren onay kutusu hala var. Oturum açmış olan kullanıcıya ait olan masaüstüyle etkileşime girememek anlamına gelir. Ancak, bu izin ile hizmetlerin hala kendi * masaüstü oturumunu aldığını düşünüyorum. –