Recuperación de información de la cadena de consulta de una aplicación ClickOnce en línea

La cadena de consulta es la parte de una dirección URL que empieza con un signo de interrogación de cierre (?) y que contiene información arbitraria con el formato nombre=valor. Supongamos que tiene una aplicación ClickOnce denominada WindowsApp1 que hospeda en servername, y quiere pasar un valor para la variable username cuando se inicia la aplicación. La dirección URL podría tener el aspecto siguiente:

http://servername/WindowsApp1.application?username=joeuser

Los dos procedimientos siguientes muestran cómo usar una aplicación ClickOnce para obtener información de la cadena de consulta.

Nota

Solo puede pasar información en una cadena de consulta cuando la aplicación se inicia mediante HTTP, en lugar de un recurso compartido de archivos o el sistema de archivos local.

En el primer procedimiento se muestra cómo la aplicación ClickOnce puede usar un fragmento de código para leer estos valores cuando se inicia la aplicación.

En el siguiente procedimiento se muestra cómo se configura la aplicación ClickOnce mediante MageUI.exe para que pueda aceptar parámetros de cadena de consulta. Debe hacerlo siempre que publique la aplicación.

Nota

Antes de tomar la decisión de habilitar esta característica, consulte la sección "Seguridad" más adelante en este tema.

Para obtener información sobre cómo crear una implementación de ClickOnce mediante Mage.exe o MageUI.exe, vea Tutorial: Implementación manual de una aplicación ClickOnce.

Nota

A partir de .NET Framework 3.5 SP1, es posible pasar argumentos de línea de comandos a una aplicación ClickOnce sin conexión. Si quiere proporcionar argumentos a la aplicación, puede pasar parámetros al archivo de acceso directo con la extensión .APPREF-MS.

Para obtener información de la cadena de consulta de una aplicación ClickOnce

  1. Coloque el código siguiente en su proyecto. Para que este código funcione, deberá tener una referencia a System.Web y agregar directivas using o Imports para System.Web, System.Collections.Specialized y System.Deployment.Application.

    Nota

    La clase ApplicationDeployment y las API del espacio de nombres System.Deployment.Application no se admiten en .NET Core y .NET 5 y versiones posteriores. En .NET 7 se admite un nuevo método de acceso a las propiedades de implementación de aplicaciones. Para obtener más información, consulte Acceso a las propiedades de implementación de ClickOnce en .NET. .NET 7 no admite el equivalente de los métodos ApplicationDeployment.

    private NameValueCollection GetQueryStringParameters()
    {
        NameValueCollection nameValueTable = new NameValueCollection();
    
        if (ApplicationDeployment.IsNetworkDeployed)
        {
            string queryString = ApplicationDeployment.CurrentDeployment.ActivationUri.Query;
            nameValueTable = HttpUtility.ParseQueryString(queryString);
        }
    
        return (nameValueTable);
    }
    
  2. Llame a la función definida previamente para recuperar una propiedad Dictionary de los parámetros de cadena de consulta, indexados por nombre.

Para habilitar que se pase una cadena de consulta en una aplicación ClickOnce con MageUI.exe

  1. Abra el símbolo del sistema de .NET y escriba:

    MageUI
    
  2. En el menú Archivo, seleccione Abrir y abra el manifiesto de implementación para su aplicación ClickOnce, que es el archivo que acaba con la extensión .application.

  3. Seleccione el panel Opciones de implementación en la ventana de navegación de la izquierda y active la casilla Permitir que se pasen los parámetros de la dirección URL a la aplicación .

  4. En el menú Archivo , seleccione Guardar.

Nota

También puede habilitar que se pase una cadena de consulta en Visual Studio. Active la casilla Permitir que se pasen los parámetros de la dirección URL a la aplicación . Para ello, abra Propiedades del proyecto, seleccione la pestaña Publicar , haga clic en el botón Opciones y, después, seleccione Manifiestos.

Nota

En ClickOnce para .NET Core 3.1 y .NET 5 o versiones posteriores, las propiedades de implementación se establecen mediante la herramienta Publicar, en lugar del Asistente para publicación y la página Publicar del Diseñador de proyectos. Para obtener más información, consulte Implementación de una aplicación de Windows de .NET con ClickOnce y ClickOnce para .NET.

Programación sólida

Cuando se usan parámetros de cadena de consulta, debe prestar mucha atención a cómo se instala y se activa la aplicación. Si la aplicación está configurada para instalarse en el equipo del usuario desde Internet o desde un recurso compartido de red, es probable que el usuario active la aplicación una sola vez a través de la dirección URL. Después de eso, el usuario normalmente activará la aplicación mediante el acceso directo del menú Inicio . Como resultado, se garantiza que la aplicación recibe argumentos de cadena de consulta una sola vez durante su vigencia. Si decide almacenar estos argumentos en el equipo del usuario para un uso futuro, es usted el responsable de almacenarlos de forma segura.

Si la aplicación solo está en línea, siempre se activará a través de una dirección URL. Pero, incluso en este caso, la aplicación debe escribirse de modo que funcione correctamente si faltan parámetros de cadena de consulta o si están dañados.

seguridad en .NET Framework

Permita que se pasen parámetros de la dirección URL a la aplicación ClickOnce únicamente si prevé limpiar los posibles caracteres malintencionados de la entrada antes de usarla. Las cadenas en las que haya incrustadas, por ejemplo, comillas, barras o caracteres de punto y coma pueden realizar operaciones de datos arbitrarios si se usan sin filtrar en una consulta SQL en una base de datos. Para más información sobre la seguridad de las cadenas de consulta, vea Script Exploits Overview.