silverlight wia

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

  1. Establecer clave de registro HKEY_LOCAL_MACHINE/Software/Microsoft/Silverlight/ (o en x64 HKEY_LOCAL_MACHINE/Software/Wow6432Node/Microsoft/Silverlight/ ) AllowElevatedTrustAppsInBrowser DWORD 0x0000001

  2. Compruebe que su política de grupo no ha deshabilitado AllowInstallOfElevatedTrustApps y AllowLaunchOfElevatedTrustApps

  3. Firme el .xap

  4. Instale el certificado en Trusted Application Store (vea capturas de pantalla que ilustran cómo)

Además, debes

  1. configurar como aplicación Fuera de navegador (incluso si no se está quedando sin navegador)

  2. antes de llamar a ComAutomationFactory.CreateObject , debe buscar Application.Current.HasElevatedPermissions y AutomationFactory.IsAvailable

  3. 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

  1. Use ProcMon para verificar que la clave de registro AllowElevatedTrustAppsInBrowser se esté leyendo

  2. Adjuntar depurador a Silverlight (ver capturas de pantalla )

  3. 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.