c#에서 com 구성 요소를 인스턴스화 할 수 없습니다 - 오류 80070002
-
06-07-2019 - |
문제
내 컴퓨터의 Windows Media Player COM 객체를 인스턴스화하려고합니다.
Guid mediaPlayerClassId = new Guid("47ac3c2f-7033-4d47-ae81-9c94e566c4cc");
Type mediaPlayerType = Type.GetTypeFromCLSID(mediaPlayerClassId);
Activator.CreateInstance(mediaPlayerType); // <-- this line throws
마지막 줄을 실행할 때 다음과 같은 오류가 발생합니다.
System.IO.FileNotFoundException was caught
Message="Retrieving the COM class factory for component with CLSID {47AC3C2F-7033-4D47-AE81-9C94E566C4CC} failed due to the following error: 80070002."
Source="mscorlib"
StackTrace:
at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandle& ctor, Boolean& bNeedSecurityCheck)
at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean fillCache)
at System.RuntimeType.CreateInstanceImpl(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean fillCache)
at System.Activator.CreateInstance(Type type, Boolean nonPublic)
at System.Activator.CreateInstance(Type type)
at MyStuff.PreviewFile(String filePath) in F:\Trunk\PreviewHandlerHosting\PreviewHandlerHost.cs:line 60
InnerException:
이 동일한 코드는 다른 개발자 기계 및 최종 사용자 시스템에서 작동합니다. 어떤 이유로 든 내 컴퓨터에서만 실패합니다. 원인은 무엇입니까?
해결책
80070002는 파일을 찾을 수없는 오류입니다.
내 생각에 당신의 기계가 종속성을 놓치고 있다고 생각합니다. 필요한 모든 라이브러리가 설치되어 있는지 확인하려면 expens.exe를 통해 COM 구성 요소를 실행해보십시오.
다른 팁
글쎄, 0x80070002는 파일을 찾을 수 없다는 것을 의미하므로 COM 등록에있는 DLL이 실제로 귀하의 컴퓨터에 존재하는지 확인합니다.
응용 프로그램 풀이 충돌하면이 오류가 발생할 수 있습니다. 결국 더 많은 기능이나 객체 초기화가있는 경우 코드를 확인할 수 있습니다. 이로 인해 메모리 누출이 발생하고 마지막으로 응용 프로그램 풀 충돌이 발생할 수 있습니다.
더 유용한 정보. 우리는 .NET 구성 요소를로드하는 클래식 ASP 웹 앱 에서이 문제를 보았습니다. 한 앱은 괜찮 았고 다른 앱은 그렇지 않았습니다. 같은 기계? 그래서 무엇을 제공합니까? COM 구성 요소로드에 실패하는 데 적절한 오류가 발생하지 않았습니다. 오류 번호 0x80070002 만 있습니다.
결국 이것은 깨진 앱의 앱 풀을 작업 앱과 동일하게 설정하여 고정되었습니다. 앱 풀에 대한 내용은 구성 요소를 제대로로드 할 수 없으며 동일한 ID 등을 의미했습니다 (IIS 6).
해당 구성 요소에 대한 레지스트리에는 오래된 버전 번호가 많이 있었지만 Regasm은 항상 그렇게합니다. 정리에 끔찍합니다. Dev 기계의 버전 번호를 이동할 때 모두 삭제하는 작은 도구를 작성해야했습니다. 그러나이 경우 해당 버전 번호는 문제가되지 않았습니다.
결론 : 권한 문제처럼 들리지만 무엇을 알고 있습니까 ..