2015-06-04 79 views
4

我們試圖允許用戶使用運行在瀏覽器中的Silverlight XAP在遠程服務器上以提升的信任關係掃描文檔,並且出現以下錯誤:無法爲指定的ProgID創建對象實例(WIA.CommonDialog)

Unhandled Error in Silverlight Application Failed to create an object instance for the specified ProgID.

故障是在下面的行:

Dim CommonDialog = AutomationFactory.CreateObject("WIA.CommonDialog") 

Application.Current.HasElevatedPermissionsAutomationFactory.IsAvailable都返回True。

我可以成功創建一個不安全的ActiveX控件實例,例如Scripting.FileSystemObject

Dim fso = AutomationFactory.CreateObject("Scripting.FileSystemObject") 

從遠程服務器上的生產環境運行代碼失敗。從本地主機的ASP.NET Development服務器運行時,代碼成功,並在調用CommonDialog.ShowAcquireImage()時顯示WIA掃描對話框。

我該如何解決這個問題? (WIA有沒有特定的方法可以防止它以這種方式被使用?)我可以採取哪些步驟來嘗試和調試它?

更新

當我試圖(通過file協議)來打開生成的Silverlight的測試頁,我得到了同樣的錯誤。

更新2

進程監視器顯示,AllowLaunchOfElevatedTrustAppsAllowElevatedTrustAppsInBrowser密鑰被成功查詢。

更新3

與受保護的模式下關閉,代碼工作。

+0

當你從xap運行代碼(例如:在一個常規的c#控制檯應用程序中),它是否工作?另外,你看看這篇文章:http://blogs.msdn.com/b/webapps/archive/2013/07/17/what-are-required-for-silverlight-application-that-requires-elevated-trust .aspx –

+0

@SimonMourier正如我在我的文章中提到的,當我使用VS開發服務器從'localhost'運行它時,代碼就可以工作。該類僅存在於Silverlight運行時中,即使在添加引用時,我也無法從其他項目類型訪問它。 RE:您提到的鏈接,我已經執行了該帖子中列出的所有步驟,並且我收到了一條不同的錯誤消息(鏈接中描述的錯誤消息是**)。此操作在當前上下文中不受支持。* *)。它似乎不是權限錯誤,否則'Scripting.FileSystemObject'會以同樣的方式失敗。 –

+0

非Silverlight C#等價物是這個'var dlg = Activator.CreateInstance(Type.GetTypeFromProgID(「WIA.CommonDialog」));'。請嘗試。否則,您必須按照帖子中的描述進行操作。不要用簡單的測試來比較其他COM對象。兩個COM對象可以非常不同。例如,FileSystemObject不顯示任何UI,而CommonDialog則顯示。 –

回答

1

MSDN reference規定,以使COM互操作的瀏覽器裏面,您必須

  1. 設置註冊表項HKEY_LOCAL_MACHINE\Software\Microsoft\Silverlight\(或64 HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Silverlight\AllowElevatedTrustAppsInBrowserDWORD0x0000001

  2. 檢查您的組策略,未禁用AllowInstallOfElevatedTrustAppsAllowLaunchOfElevatedTrustApps

  3. 簽署。XAP

  4. 安裝證書到受信任的應用程序商店(見screenshots說明如何)

此外,還必須

  1. 配置爲脫離瀏覽器應用(即使你沒有用完的瀏覽器)

  2. 在致電ComAutomationFactory.CreateObject之前,您應該檢查Application.Current.HasElevatedPermissionsAutomationFactory.IsAvailable

  3. 注意,從http://localhosthttp://127.0.0.1高架許可測試是不可靠的測試,如Silverlight運行時使例外,這兩個網址。請使用file://

故障排除

  1. 使用將procmon驗證AllowElevatedTrustAppsInBrowser註冊表項被讀取

  2. 連接調試Silverlight的(見screenshots

  3. MSIE保護模式設置,可以也會對Silverlight應用程序是否可以在提升權限下運行產生不利影響秒。嘗試使用不同的保護模式設置運行。