silverlight - Error al crear una instancia de objeto para el ProgID especificado(WIA.CommonDialog)
(1)
Estamos tratando de permitir a los usuarios escanear documentos utilizando un Silverlight XAP que se ejecuta en el navegador con confianza elevada, desde un servidor remoto, y se obtiene el siguiente error:
Error no administrado en la aplicación Silverlight Error al crear una instancia de objeto para el ProgID especificado.
El error está en la siguiente línea:
Dim CommonDialog = AutomationFactory.CreateObject("WIA.CommonDialog")
Application.Current.HasElevatedPermissions y AutomationFactory.IsAvailable ambos devuelven True.
Puedo crear con éxito una instancia de controles ActiveX inseguros, por ejemplo, Scripting.FileSystemObject
:
Dim fso = AutomationFactory.CreateObject("Scripting.FileSystemObject")
El código falla cuando se ejecuta desde el entorno de producción en el servidor remoto. Cuando se ejecuta desde el servidor de desarrollo ASP.NET desde el host local, el código tiene éxito y se muestra el cuadro de diálogo de análisis WIA al invocar CommonDialog.ShowAcquireImage()
.
¿Cómo puedo resolver esto? (¿Hay algo específico sobre WIA que impide que se use de esta manera?) ¿Qué pasos puedo dar para intentar depurar esto?
Actualizar
Cuando intento abrir la página de prueba de Silverlight generada (a través del protocolo de file
), aparece el mismo error.
Actualización 2
Process Monitor muestra que las claves AllowLaunchOfElevatedTrustApps
y AllowElevatedTrustAppsInBrowser
se están consultando con éxito.
Actualización 3
Con el modo protegido desactivado, el código funciona.
La referencia de MSDN establece que para habilitar COM Interop dentro del navegador, debe
Establecer clave de registro
HKEY_LOCAL_MACHINE/Software/Microsoft/Silverlight/
(o en x64HKEY_LOCAL_MACHINE/Software/Wow6432Node/Microsoft/Silverlight/
) AllowElevatedTrustAppsInBrowserDWORD
0x0000001
Compruebe que su política de grupo no ha deshabilitado
AllowInstallOfElevatedTrustApps
yAllowLaunchOfElevatedTrustApps
Firme el .xap
Instale el certificado en Trusted Application Store (vea capturas de pantalla que ilustran cómo)
Además, debes
configurar como aplicación Fuera de navegador (incluso si no se está quedando sin navegador)
antes de llamar a
ComAutomationFactory.CreateObject
, debe buscarApplication.Current.HasElevatedPermissions
yAutomationFactory.IsAvailable
tenga en cuenta que las pruebas de permiso elevado de http: // localhost y http://127.0.0.1 no son una prueba confiable, ya que el tiempo de ejecución de Silverlight hace una excepción para estas dos URL. En su lugar, use
file://
.
Solución de problemas
Use ProcMon para verificar que la clave de registro
AllowElevatedTrustAppsInBrowser
se esté leyendoAdjuntar depurador a Silverlight (ver capturas de pantalla )
La configuración del Modo protegido de MSIE también puede afectar adversamente si una aplicación de Silverlight puede ejecutarse con Permisos Elevados. Intente ejecutar con diferentes configuraciones de Modo protegido.