4

自分のマシンで 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: 

この同じコードは、他の開発者のマシンやエンド ユーザーのマシンでも機能します。何らかの理由で、私のマシンでのみ失敗します。原因は何ですか?

4

4 に答える 4

6

80070002 はファイルが見つからないというエラーです。

私の推測では、あなたのマシンには依存関係がありません。必要なライブラリがすべてインストールされているかどうかを確認するには、depends.exe を使用して com コンポーネントを実行してみてください。

于 2009-06-17T16:08:19.097 に答える
2

0x80070002 はファイルが見つからないことを意味するので、COM 登録で指定された DLL が実際にマシンに存在するかどうかを確認します。

于 2009-06-17T16:06:58.817 に答える
0

アプリケーション プールがクラッシュすると、このエラーが発生する可能性があります。最終的に繰り返される関数またはオブジェクトの初期化があるかどうか、コードを確認できます。これにより、メモリ リークが発生し、最終的にはアプリケーション プールがクラッシュする可能性があります

于 2010-03-13T05:12:05.910 に答える