【发布时间】:2015-06-04 11:28:17
【问题描述】:
我们正在尝试允许用户使用运行在浏览器中且信任度提升的 Silverlight XAP 从远程服务器扫描文档,但出现以下错误:
Silverlight 应用程序中的未处理错误无法为指定的 ProgID 创建对象实例。
失败在以下行:
Dim CommonDialog = AutomationFactory.CreateObject("WIA.CommonDialog")
Application.Current.HasElevatedPermissions 和 AutomationFactory.IsAvailable 都返回 True。
我可以成功创建不安全 ActiveX 控件的实例,例如Scripting.FileSystemObject:
Dim fso = AutomationFactory.CreateObject("Scripting.FileSystemObject")
从远程服务器上的生产环境运行代码时失败。从 localhost 从 ASP.NET 开发服务器运行时,代码成功,并在调用 CommonDialog.ShowAcquireImage() 时显示 WIA 扫描对话框。
我该如何解决这个问题? (是否有一些关于 WIA 的特定内容阻止它以这种方式使用?)我可以采取哪些步骤来尝试调试它?
更新
当我尝试打开生成的 Silverlight 测试页面时(通过file 协议),我得到了同样的错误。
更新 2
进程监视器显示AllowLaunchOfElevatedTrustApps 和AllowElevatedTrustAppsInBrowser 键正在被成功查询。
更新 3
关闭保护模式后,代码可以工作。
【问题讨论】:
-
当您从 xap 运行代码时(例如:在常规 c# 控制台应用程序中),它是否有效?另外,你看过这篇文章了吗:blogs.msdn.com/b/webapps/archive/2013/07/17/…
-
@SimonMourier 正如我在帖子中提到的,当我使用 VS 开发服务器从
localhost运行它时,代码可以工作。此类仅存在于 Silverlight 运行时中,即使添加引用,我似乎也无法从其他项目类型访问它。 RE:您提到的链接,我已经执行了该帖子中列出的所有步骤,并且收到了不同的错误消息(链接中描述的错误消息是 当前上下文不支持此操作。 )。这似乎不是权限错误,否则Scripting.FileSystemObject会以同样的方式失败。 -
非silverlight C# 等价物是
var dlg = Activator.CreateInstance(Type.GetTypeFromProgID("WIA.CommonDialog"));。请尝试一下。否则,您必须按照帖子中的说明进行操作。不要仅仅通过简单的测试就与其他 COM 对象进行比较。两个 COM 对象可能非常不同。例如,FileSystemObject 不显示任何 UI,而 CommonDialog 则显示。 -
@SimonMourier 它可以在控制台应用程序中工作。
-
Silverlight 是一个客户端应用程序,无论是从生产服务器还是开发服务器提供服务都应该无关紧要。您可以使用 Visual Studio 调试/附加到从生产环境提供的 Silverlight 应用程序。
标签: silverlight wia