Seguridad, control de versiones y manifiestos problemas en implementaciones de ClickOnce

Hay una variedad de problemas con la seguridad de ClickOnce, el control de versiones de aplicaciones y la sintaxis de manifiesto y la semántica que pueden hacer que una implementación de ClickOnce no se realice correctamente.

ClickOnce y control de cuenta de usuario de Windows

En Windows Vista y las versiones posteriores de Windows, las aplicaciones se ejecutan de forma predeterminada como un usuario estándar, incluso si el usuario actual ha iniciado sesión con una cuenta que tenga permisos de administrador. Si una aplicación debe realizar una acción que requiera permisos de administrador, indica al sistema operativo, que a continuación solicita al usuario que escriba sus credenciales de administrador. Esta característica, denominada Control de cuentas de usuario (UAC), impide que las aplicaciones realicen cambios que puedan afectar a todo el sistema operativo sin la aprobación explícita de un usuario. Las aplicaciones de Windows declaran que requieren esta elevación de permisos especificando el atributo requestedExecutionLevel en la sección trustInfo de su manifiesto de aplicación.

Debido al riesgo de exponer aplicaciones a ataques de elevación de seguridad, las aplicaciones ClickOnce no pueden solicitar elevación de permisos si UAC está habilitado para el cliente. Cualquier aplicación ClickOnce que intente establecer su atributo requestedExecutionLevel en requireAdministrator o highestAvailable no se instalará en Windows Vista ni en las versioones posteriores.

En algunos casos, la aplicación ClickOnce puede intentar ejecutarse con permisos de administrador debido a la lógica de detección del instalador en Windows. En este caso, puede establecer el atributo requestedExecutionLevel en el manifiesto de aplicación en asInvoker. Esto hará que la propia aplicación se ejecute sin elevación. Visual Studio agrega automáticamente este atributo a todos los manifiestos de aplicación.

Si está desarrollando una aplicación que requiere permisos de administrador para toda la duración de la aplicación, debe considerar la posibilidad de implementar la aplicación mediante la tecnología de Windows Installer (MSI). Para obtener más información, vea Conceptos básicos de Windows Installer.

Cuotas de aplicaciones en línea y aplicaciones de confianza parcial

Si la aplicación ClickOnce se ejecuta en línea en lugar de a través de una instalación, debe ajustarse a la cuota establecida para las aplicaciones en línea. Además, una aplicación de red que se ejecuta en confianza parcial, como con un conjunto restringido de permisos de seguridad, no puede ser mayor que la mitad del tamaño de la cuota.

Para obtener más información e instrucciones sobre cómo cambiar la cuota de aplicaciones en línea, consulte Información general sobre la caché de ClickOnce.

Problemas de control de versiones

Puede experimentar problemas si asigna nombres seguros al ensamblado e incrementa el número de versión del ensamblado para reflejar una actualización de la aplicación. Cualquier ensamblado compilado con una referencia a un ensamblado con nombre seguro debe volver a compilarse o el ensamblado intentará hacer referencia a la versión anterior. El ensamblado probará esto porque el ensamblado usa el valor de versión anterior en su solicitud de enlace.

Por ejemplo, supongamos que tiene un ensamblado con nombre seguro en su propio proyecto con la versión 1.0.0.0. Después de compilar el ensamblado, agréguelo como referencia al proyecto que contiene la aplicación principal. Si actualiza el ensamblado, incremente la versión a 1.0.0.1 e intente implementarlo sin volver a compilar la aplicación, la aplicación no podrá cargar el ensamblado en tiempo de ejecución.

Este error solo puede producirse si está editando manualmente los manifiestos ClickOnce; no debería experimentar este error si genera la implementación mediante Visual Studio.

Especificar ensamblados individuales de .NET Framework en el manifiesto

La aplicación no se cargará si ha editado manualmente una implementación ClickOnce para hacer referencia a una versión anterior de un ensamblado de .NET Framework. Por ejemplo, si agregó una referencia al ensamblado de System.Net para una versión de .NET Framework anterior a la versión especificada en el manifiesto, se produciría un error. En general, no debe intentar especificar referencias a ensamblados individuales de .NET Framework, ya que la versión de .NET Framework en la que se ejecuta la aplicación se especifica como una dependencia en el manifiesto de aplicación.

Problemas de análisis de manifiestos

Los archivos de manifiesto usados por ClickOnce son archivos XML y deben tener un formato correcto y válido: deben obedecer las reglas de sintaxis XML y usar solo elementos y atributos definidos en el esquema XML correspondiente.

Algo que puede causar problemas en un archivo de manifiesto es seleccionar un nombre para la aplicación que contiene un carácter especial, como una comilla simple o doble. El nombre de la aplicación forma parte de su identidad ClickOnce. ClickOnce actualmente no analiza las identidades que contienen caracteres especiales. Si la aplicación no se activa, asegúrese de que usa solo caracteres alfabéticos y numéricos para el nombre e intente implementarlo de nuevo.

Si ha editado manualmente los manifiestos de implementación o aplicación, es posible que los haya dañado involuntariamente. El manifiesto dañado impedirá una instalación correcta de ClickOnce. Para depurar estos errores en tiempo de ejecución, haga clic en Detalles en el cuadro de diálogo Error ClickOnce y lea el mensaje de error en el registro. El registro mostrará uno de los mensajes siguientes:

  • Descripción del error de sintaxis y el número de línea y la posición del carácter donde se produjo el error.

  • Nombre de un elemento o atributo usado en infracción del esquema del manifiesto. Si ha agregado XML manualmente a los manifiestos, tendrá que comparar las adiciones a los esquemas de manifiesto. Para obtener más información, vea Manifiesto de implementación de ClickOnce y Manifiesto de aplicación ClickOnce.

  • Conflicto de identificadores. Las referencias de dependencia en los manifiestos de implementación y aplicación deben ser únicas en sus atributos name y publicKeyToken. Si ambos atributos coinciden entre dos elementos dentro de un manifiesto, el análisis de manifiestos no se realizará correctamente.

Precauciones al cambiar manualmente manifiestos o aplicaciones

Al actualizar un manifiesto de aplicación, debe volver a firmar el manifiesto de aplicación y el manifiesto de implementación. El manifiesto de implementación contiene una referencia al manifiesto de aplicación que incluye el hash del archivo y su firma digital.

Precauciones con el uso del proveedor de implementación

El manifiesto de implementación de ClickOnce tiene una propiedad deploymentProvider que apunta a la ruta de acceso completa de la ubicación desde la que se debe instalar y atender la aplicación:

<deploymentProvider codebase="http://myserver/myapp.application" />

Esta ruta de acceso se establece cuando ClickOnce crea la aplicación y es obligatoria para las aplicaciones instaladas. La ruta de acceso apunta a la ubicación estándar desde la que el instalador de ClickOnce instalará la aplicación y buscará actualizaciones. Si usa el comando xcopy para copiar una aplicación ClickOnce en otra ubicación, pero no cambia la propiedad deploymentProvider, ClickOnce seguirá haciendo referencia a la ubicación original cuando intente descargar la aplicación.

Si desea mover o copiar una aplicación, también debe actualizar la deploymentProvider ruta de acceso para que el cliente se instale realmente desde la nueva ubicación. La actualización de esta ruta de acceso es principalmente un problema si tiene aplicaciones instaladas. En el caso de las aplicaciones en línea que siempre se inician a través de la dirección URL original, el valor deploymentProvider es opcional. Si se establece deploymentProvider, se respetará; de lo contrario, se usará la dirección URL usada para iniciar la aplicación como dirección URL base para descargar los archivos de la aplicación.

Nota

Cada vez que actualice el manifiesto, también debe firmarlo de nuevo.

Solución de problemas de implementaciones de ClickOnceAplicaciones ClickOnce segurasElegir una estrategia de implementación ClickOnce