2009-06-17 141 views
3

我試圖實例化我的機器上的Windows Media Player的COM對象:不能在C#中實例化COM組件 - 錯誤80070002

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: 

該代碼適用於其他開發者機器和最終用戶機器。出於某種原因,它只在我的機器上失敗。可能是什麼原因?

+0

我希望你張貼的問題是什麼,去幫助別人誰在這裏後抵達.... – overslacked 2009-11-24 04:45:30

+0

的問題變成了成爲我們公司特有的東西。基本上,我們的軟件已經安裝了一個Windows Media預覽處理程序,後來被卸載,但留下了一些註冊表鍵。此預覽處理程序已經消失 - 因此文件未找到錯誤 - 但是一些註冊表項已遺留,導致此問題。 – 2009-11-24 16:05:18

+0

非常感謝您的更新!我一直在上下服務器,我們有同樣的錯誤...我會採取任何細節,不管它們看起來多麼抽象或無用。 – overslacked 2009-11-24 21:16:52

回答

5

80070002上確實存在未發現的錯誤文件。

我的猜測是你的機器缺少依賴關係。嘗試通過depends.exe運行com組件,以查看是否安裝了所有必需的庫。

2

好,0x80070002手段找不到文件,所以我檢查,看是否DLL指出,在COM註冊您的機器

0

如果應用程序池崩潰,則可能發生此錯誤。如果有任何函數或對象初始化重複更多,您可以檢查您的代碼。這可能導致內存泄漏,並在最後的應用程序池崩潰

0

進一步可能有用的信息。我們在加載.net組件的經典ASP Web應用程序中看到了此問題。一個應用程序很好,另一個沒有。同一臺機器?那麼是什麼給了?我們沒有得到正確的錯誤,無法加載COM組件,只是錯誤號0x80070002。

最終,通過將破損的應用程序的應用程序池設置爲與正在運行的應用程序相同,修復了這個問題。有關應用程序池的問題意味着組件無法正確加載,相同的標識等(iis 6)。

該組件在註冊表中存在一堆舊版本號,但regasm總是這樣做,它在清理時很糟糕,我們甚至必須編寫一個小工具來在版本號之間移動時刪除它們全部在開發機器上。但在這種情況下,這些版本號不是問題。

結論:聽起來像一個權限問題,但我知道是什麼..