我们正在尝试允许用户使用从远程服务器以提升的信任在浏览器中运行的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
Process Monitor显示正在成功查询AllowLaunchOfElevatedTrustApps
和AllowElevatedTrustAppsInBrowser
个键。
更新3
关闭保护模式后,代码可以正常工作。
答案 0 :(得分:1)
MSDN reference表示要在浏览器中启用COM Interop,您必须
设置注册表项HKEY_LOCAL_MACHINE\Software\Microsoft\Silverlight\
(或x64 HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Silverlight\
) AllowElevatedTrustAppsInBrowser DWORD
0x0000001
检查您的群组政策是否已停用AllowInstallOfElevatedTrustApps
和AllowLaunchOfElevatedTrustApps
签署.xap
将证书安装到受信任的应用商店(请参阅screenshots说明具体方法)
此外,您必须
配置为Out of Browser Application(即使您没有用完浏览器外)
在致电ComAutomationFactory.CreateObject
之前,您应该检查Application.Current.HasElevatedPermissions
和AutomationFactory.IsAvailable
请注意,http://localhost和http://127.0.0.1的提升权限测试不是可靠的测试,因为Silverlight运行时会对这两个网址进行例外处理。而是使用file://
。
故障排除
使用ProcMon验证是否正在读取AllowElevatedTrustAppsInBrowser
注册表项
将调试器附加到Silverlight(请参阅screenshots)
MSIE保护模式设置还会对Silverlight应用程序是否可以使用提升权限运行产生负面影响。尝试使用不同的保护模式设置运行。