我們試圖允許用戶使用運行在瀏覽器中的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.HasElevatedPermissions和AutomationFactory.IsAvailable都返回True。
我可以成功創建一個不安全的ActiveX控件實例,例如Scripting.FileSystemObject
:
Dim fso = AutomationFactory.CreateObject("Scripting.FileSystemObject")
從遠程服務器上的生產環境運行代碼失敗。從本地主機的ASP.NET Development服務器運行時,代碼成功,並在調用CommonDialog.ShowAcquireImage()
時顯示WIA掃描對話框。
我該如何解決這個問題? (WIA有沒有特定的方法可以防止它以這種方式被使用?)我可以採取哪些步驟來嘗試和調試它?
更新
當我試圖(通過file
協議)來打開生成的Silverlight的測試頁,我得到了同樣的錯誤。
更新2
進程監視器顯示,AllowLaunchOfElevatedTrustApps
和AllowElevatedTrustAppsInBrowser
密鑰被成功查詢。
更新3
與受保護的模式下關閉,代碼工作。
當你從xap運行代碼(例如:在一個常規的c#控制檯應用程序中),它是否工作?另外,你看看這篇文章:http://blogs.msdn.com/b/webapps/archive/2013/07/17/what-are-required-for-silverlight-application-that-requires-elevated-trust .aspx –
@SimonMourier正如我在我的文章中提到的,當我使用VS開發服務器從'localhost'運行它時,代碼就可以工作。該類僅存在於Silverlight運行時中,即使在添加引用時,我也無法從其他項目類型訪問它。 RE:您提到的鏈接,我已經執行了該帖子中列出的所有步驟,並且我收到了一條不同的錯誤消息(鏈接中描述的錯誤消息是**)。此操作在當前上下文中不受支持。* *)。它似乎不是權限錯誤,否則'Scripting.FileSystemObject'會以同樣的方式失敗。 –
非Silverlight C#等價物是這個'var dlg = Activator.CreateInstance(Type.GetTypeFromProgID(「WIA.CommonDialog」));'。請嘗試。否則,您必須按照帖子中的描述進行操作。不要用簡單的測試來比較其他COM對象。兩個COM對象可以非常不同。例如,FileSystemObject不顯示任何UI,而CommonDialog則顯示。 –