【发布时间】:2010-11-03 17:30:12
【问题描述】:
我正在尝试在我的机器上实例化一个 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:
相同的代码适用于其他开发人员机器和最终用户机器。出于某种原因,它只在我的机器上失败。可能是什么原因?
【问题讨论】:
-
我希望你能发布问题所在,以帮助稍后到达这里的其他人......
-
这个问题原来是我们公司特有的问题。基本上,我们的软件安装了一个 Windows Media 预览处理程序,该处理程序后来被卸载,但保留了一些注册表项。此预览处理程序已消失 - 因此未找到文件错误 - 但留下了一些注册表项,导致此问题。
-
非常感谢您的更新!我一直在运行和关闭一台服务器,我们遇到同样的错误......我会记录任何细节,无论它们看起来多么抽象或无用。
-
如果我没记错的话,我在注册表中搜索了 ID,然后在 OleView 中查找了对象。从那里,我开始意识到它指向的是我们一直在使用的旧 Windows Media Player 格式的预览处理程序。从注册表中删除该组件解决了这个问题。
标签: c# com interop com-interop