Shell32 및 Folder.GetDetailsOf()를 사용하여 WTV 파일에서 메타 데이터를 가져 오는 .NET 4.0 라이브러리가 있습니다. 콘솔 및 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)). .
필자는 Apartment Threading, COM Interops, Dynamic, 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을 선택하기 만하면 상호 작용을 허용하는 확인란이 아직 있습니다. 내 생각 엔 로그인 한 사용자의 데스크톱과 상호 작용할 수 없다는 말입니다. 그러나, 나는 그 권한을 가진 서비스가 여전히 자신의 * 데스크탑 세션을 얻는다고 생각한다. –