簡體   English   中英

為什么我對Activator.CreateInstance的調用會間歇性地失敗?

[英]Why does my call to Activator.CreateInstance intermittently fail?

我正在使用以下代碼訪問Windows資源管理器Shell的樂隊網站服務:

Guid GUID_TrayBandSiteService = new Guid(0xF60AD0A0, 0xE5E1, 0x45cb, 0xB5, 0x1A, 0xE1, 0x5B, 0x9F, 0x8B, 0x29, 0x34);
Type shellTrayBandSiteService = Type.GetTypeFromCLSID(GUID_TrayBandSiteService, true);
site = Activator.CreateInstance(shellTrayBandSiteService) as IBandSite;

大多數情況下,它很有效。 在很小的時間內(小於1%),對Activator.CreateInstance的調用會引發以下異常:

System.Runtime.InteropServices.COMException (0x80040154): Retrieving the COM class factory for component with CLSID {F60AD0A0-E5E1-45CB-B51A-E15B9F8B2934} failed due to the following error: 80040154.
  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)

我查找了錯誤代碼,似乎表明該服務未注冊。 我很確定實際情況並非如此,因為調用會在稍后時間正常工作,而且CLSID由explorer.exe提供。

我很難過。 什么可能導致Activator.CreateInstance失敗,但很少?

權限? 是的,高完整性應用程序在中等完整性應用程序中訪問COM對象時出現問題。 在我的網站的某個地方有一個這樣的演示。 啊,但是對於TrayNotify類,不是TrayBandSiteService 我希望你沒有花太多時間搞清楚你可能很容易讀到的東西。

無論如何,看到的最后一段這樣 ,從我現在的報價:

另外,請注意,如果啟用了用戶帳戶控制(UAC)並且程序以提升的權限運行,則程序將失敗。 EXPLORER是COM服務器,TRAYNOT(我的演示程序)是COM客戶端。 然而,EXPLORER只具有中等完整性。 雖然微軟關於UAC的說明 - 它們並不足以算作編程文檔 - 處理低完整性COM客戶端試圖與更高完整性的COM服務器通信的情況,但奇怪的是反過來說。 保護較高完整性的COM客戶端免受較低完整性COM服務器的影響,就像保護較高完整性程序免受從較低完整性程序接收窗口消息一樣。 對於后者,Microsoft為更高完整性的程序提供明確的方法,以便從較低完整性的源中打開自己的預期消息。 找到COM的類似條款可能是另一次有價值的練習。

我很遺憾地說我從來沒有找到時間。

我在這里找到了關於TrayBandSiteService的一些解釋: http//www.geoffchappell.com/viewer.htm? doc = studies /windows / shells / explorer / classes / traybandsiteservice.htm

如果Geoff Chappell是對的,它可能與我的機器上的問題相同:有時,資源管理器會重新啟動,而在這一刻,可能無法訪問TrayBandSiteService。

Activator.CreateInstance(typeof(MyType))當我嘗試在獨立的Windows應用程序中運行代碼時工作正常。 當我嘗試在wcf服務下的類庫中運行相同的代碼時失敗的地方

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM