Compartir a través de


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 la aplicación y la sintaxis de manifiesto y la semántica que pueden hacer que una implementación de ClickOnce no se realice correctamente.

Control de cuentas de usuario de Windows y ClickOnce

En Windows Vista y versiones posteriores de Windows, las aplicaciones se ejecutan de forma predeterminada como 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 requestedExecutionLevel atributo en la trustInfo sección 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 la elevación de permisos si UAC está habilitado para el cliente. Cualquier aplicación ClickOnce que intente establecer su atributo en requestedExecutionLevel, requireAdministrator o highestAvailable no se instalará en Windows Vista y versiones 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 a 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 va a desarrollar 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) en su lugar. Para obtener más información, consulta Conceptos básicos de Windows Installer.

Límites 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 caber dentro de 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 cuota.

Nota:

En ClickOnce para .NET Core y .NET 5 o posterior, no se admite la confianza parcial, que requiere seguridad de acceso al código. En .NET Framework, el uso de seguridad de acceso a código no es un procedimiento recomendado y no se recomienda.

Para obtener más información e instrucciones sobre cómo cambiar la cuota de aplicaciones en línea, consulte Introducción a la caché 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 fuerte en su propio proyecto de 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 la identidad ClickOnce. ClickOnce actualmente no analiza las identidades que contienen caracteres especiales. Si la aplicación no se activa, asegúrese de que solo usa 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. Puede depurar estos errores en tiempo de ejecución haciendo clic en Detalles en el cuadro de diálogo Error ClickOnce y leyendo 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 sus adiciones con los esquemas de manifiesto. Para obtener más información, consulte Manifiesto de implementación clickOnce y Manifiesto de aplicación ClickOnce.

  • Conflicto de identificación. Las referencias de dependencia en los manifiestos de implementación y aplicación deben ser únicas en sus atributos name y publicKeyToken. Si los atributos de dos elementos en un manifiesto coinciden, el análisis del manifiesto no tendrá éxito.

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 deploymentProvider propiedad que apunta a la ruta de acceso completa de la ubicación desde donde 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 desde y buscará actualizaciones. Si usa el comando xcopy para copiar una aplicación ClickOnce en otra ubicación, pero no cambia la deploymentProvider propiedad, 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. Actualizar esta ruta de acceso es principalmente un problema si tiene aplicaciones instaladas. Para las aplicaciones en línea que siempre se inician a través de la URL original, establecer el deploymentProvider es opcional. Si deploymentProvider se establece, se respetará; de lo contrario, la dirección URL que se usa para iniciar la aplicación se usará 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.

Solucionar problemas de implementaciones ClickOnceAsegurar aplicaciones ClickOnceElegir una estrategia de implementación ClickOnce