Automatizar el inicio de aplicaciones de Windows 10 para UWPAutomate launching Windows 10 UWP apps

IntroducciónIntroduction

Los desarrolladores tienen varias opciones para lograr el inicio automatizado de las aplicaciones para la Plataforma universal de Windows (UWP).Developers have several options for achieving automated launching of Universal Windows Platform (UWP) apps. En este documento exploramos los métodos para iniciar una aplicación mediante la activación de protocolos y del inicio.In this paper we will explore methods of launching an app by using protocol activation and launch activation.

La activación de protocolos permite que una aplicación se registre como controlador para un protocolo determinado.Protocol activation allows an app to register itself as a handler for a given protocol.

La activación del inicio es el inicio normal de una aplicación, como, por ejemplo, al iniciarla desde el icono de la aplicación.Launch activation is the normal launching of an app, such as launching from the app tile.

Con cada método de activación, tienes la posibilidad de usar la línea de comandos o una aplicación de selector.With each activation method, you have the option of using the command line or a launcher application. Para todos los métodos de activación, si la aplicación se está ejecutando, la activación la llevará al primer plano (lo que la reactiva) y proporcionará argumentos de activación nuevos.For all activation methods, if the app is currently running, the activation will bring the app to the foreground (which reactivates it) and provide the new activation arguments. Esto ofrece flexibilidad para usar los comandos de activación para proporcionar mensajes nuevos a la aplicación.This allows flexibility to use activation commands to provide new messages to the app. Es importante tener en cuenta que el proyecto debe compilarse e implementarse para que el método de activación ejecute la aplicación recién actualizada.It is important to note that the project needs to be compiled and deployed for the activation method to run the newly updated app.

Activación de protocolosProtocol activation

Sigue estos pasos para configurar la activación de protocolos para las aplicaciones:Follow these steps to set up protocol activation for apps:

  1. Abre el archivo Package.appxmanifest en Visual Studio.Open the Package.appxmanifest file in Visual Studio.

  2. Selecciona la pestaña Declaraciones.Select the Declarations tab.

  3. En la lista desplegable Declaraciones disponibles, selecciona Protocolo y, a continuación, Agregar.Under the Available Declarations drop-down, select Protocol, and then select Add.

  4. En Propiedades, en el campo Nombre, escribe un nombre único para iniciar la aplicación.Under Properties, in the Name field, enter a unique name to launch the app.

    Activación de protocolos

  5. Guarda el archivo e implementa el proyecto.Save the file and deploy the project.

  6. Una vez implementado el proyecto, la activación de protocolos debería estar lista.After the project has been deployed, the protocol activation should be set.

  7. Ve a Control Panel\All Control Panel Items\Default Programs y selecciona Asociar un tipo de archivo o protocolo con un determinado programa.Go to Control Panel\All Control Panel Items\Default Programs and select Associate a file type or protocol with a specific program. Desplázate hasta la sección Protocolos para ver si aparece el protocolo en la lista.Scroll to the Protocols section to see if the protocol is listed.

Ahora que la activación de protocolos está configurada, tienes dos opciones (la línea de comandos o la aplicación de selector) para activar la aplicación mediante el protocolo.Now that protocol activation is set up, you have two options (the command line or launcher application) for activating the app by using the protocol.

Línea de comandosCommand line

Para activar la aplicación con un protocolo, usa la línea de comandos con el inicio de comando seguido del nombre de protocolo definido previamente, dos puntos (":") y cualquier parámetro.The app can be protocol-activated by using the command line with the command start followed by the protocol name set previously, a colon (“:”), and any parameters. Los parámetros pueden ser cualquier cadena arbitraria. Sin embargo, para aprovechar las funcionalidades del identificador uniforme de recursos (URI), es recomendable seguir el formato de URI estándar:The parameters can be any arbitrary string; however, to take advantage of the Uniform Resource Identifier (URI) capabilities, it is advisable to follow the standard URI format:

scheme://username:password@host:port/path.extension?query#fragment

El objeto de URI tiene métodos para analizar una cadena URI en este formato.The Uri object has methods of parsing a URI string in this format. Para obtener más información, consulta Uri class (MSDN).For more information, see Uri class (MSDN).

Ejemplos:Examples:

>start bingnews:
>start myapplication:protocol-parameter
>start myapplication://single-player/level3?godmode=1&ammo=200

La activación de línea de comandos de protocolo admite caracteres Unicode hasta un límite 2038 caracteres en el URI sin procesar.Protocol command-line activation supports Unicode characters up to a 2038-character limit on the raw URI.

Aplicación de selectorLauncher application

Para iniciar, crea una aplicación independiente que admita la API de WinRT.For launching, create a separate application that supports the WinRT API. En el ejemplo siguiente se muestra código de C++ para iniciar con la activación de protocolos en un programa de selector, donde PackageURI es el URI de la aplicación con los argumentos correspondientes; por ejemplo myapplication: o myapplication:protocol activation arguments.The C++ code for launching with protocol activation in a launcher program is shown in the following sample, where PackageURI is the URI for the application with any arguments; for example myapplication: or myapplication:protocol activation arguments.

bool ProtocolLaunchURI(Platform::String^ URI)
{
       IAsyncOperation<bool>^ protocolLaunchAsyncOp;
       try
       {
              protocolLaunchAsyncOp = Windows::System::Launcher::LaunchUriAsync(ref new 
Uri(URI));
       }
       catch (Platform::Exception^ e)
       {
              Platform::String^ dbgStr = "ProtocolLaunchURI Exception Thrown: " 
+ e->ToString() + "\n";
              OutputDebugString(dbgStr->Data());
              return false;
       }

       concurrency::create_task(protocolLaunchAsyncOp).wait();

       if (protocolLaunchAsyncOp->Status == AsyncStatus::Completed)
       {
              bool LaunchResult = protocolLaunchAsyncOp->GetResults();
              Platform::String^ dbgStr = "ProtocolLaunchURI " + URI 
+ " completed. Launch result " + LaunchResult + "\n";
              OutputDebugString(dbgStr->Data());
              return LaunchResult;
       }
       else
       {
              Platform::String^ dbgStr = "ProtocolLaunchURI " + URI + " failed. Status:" 
+ protocolLaunchAsyncOp->Status.ToString() + " ErrorCode:" 
+ protocolLaunchAsyncOp->ErrorCode.ToString() + "\n";
              OutputDebugString(dbgStr->Data());
              return false;
       }
}

La activación de protocolos con la aplicación de selector tiene las mismas limitaciones de argumentos que la activación de protocolos con la línea de comandos.Protocol activation with the launcher application has the same limitations for arguments as protocol activation with the command line. Ambas admiten caracteres Unicode hasta un límite 2038 caracteres en el identificador URI sin procesar.Both support Unicode characters up to a 2038-character limit on the raw URI.

Activación de selectorLaunch activation

También puedes iniciar la aplicación mediante la activación de selector.You can also launch the app by using launch activation. No se requiere ninguna configuración, pero se necesita el identificador de modelo de usuario de aplicación (AUMID) de la aplicación para UWP.No setup is required, but the Application User Model ID (AUMID) of the UWP app is needed. El AUMID es el nombre de familia de paquete seguido de un signo de exclamación y el identificador de la aplicación.The AUMID is the package family name followed by an exclamation point and the application ID.

La mejor forma de obtener el nombre de familia de paquete es completar estos pasos:The best way to obtain the package family name is to complete these steps:

  1. Abre el archivo Package.appxmanifest.Open the Package.appxmanifest file.

  2. En la pestaña Empaquetado, escribe el Nombre del paquete.On the Packaging tab, enter the Package name.

    Activación de selector

  3. Si el nombre de familia de paquete no se muestra, abre PowerShell y ejecuta >get-appxpackage MyPackageName para encontrar PackageFamilyName.If the Package family name is not listed, open PowerShell and run >get-appxpackage MyPackageName to find the PackageFamilyName.

El identificador de la aplicación se puede encontrar en el archivo Package.appxmanifest (abierto en la vista XML), bajo el elemento <Applications>.The application ID can be found in the Package.appxmanifest file (opened in XML view) under the <Applications> element.

Línea de comandosCommand line

Con el SDK de Windows 10 se instala una herramienta para realizar una activación de inicio de una aplicación para UWP.A tool for performing a launch activation of a UWP app is installed with the Windows 10 SDK. Se puede ejecutar desde la línea de comandos y usa el AUMID de la aplicación para iniciarse como argumento.It can be run from the command line, and it takes the AUMID of the app to be launched as an argument.

C:\Program Files (x86)\Windows Kits\10\App Certification Kit\microsoft.windows.softwarelogo.appxlauncher.exe <AUMID>

Debe tener este aspecto:It would look something like this:

"C:\Program Files (x86)\Windows Kits\10\App Certification Kit\microsoft.windows.softwarelogo.appxlauncher.exe" MyPackageName_ph1m9x8skttmg!AppId

Esta opción no admite argumentos de línea de comandos.This option does not support command-line arguments.

Aplicación de selectorLauncher application

Puedes crear una aplicación independiente que admita el uso de COM para el inicio.You can create a separate application that supports using COM to use for launching. En el ejemplo siguiente se muestra el código de C++ para iniciarse con la activación de inicio en un programa selector.The following example shows C++ code for launching with launch activation in a launcher program. Con este código, puedes crear un objeto ApplicationActivationManager y llamar a ActivateApplication pasando el AUMID encontrado anteriormente y los argumentos correspondientes.With this code, you can create an ApplicationActivationManager object and call ActivateApplication passing in the AUMID found previously and any arguments. Para obtener más información acerca de los otros parámetros, consulta el tema sobre el método IApplicationActivationManager::ActivateApplication (MSDN).For more information about the other parameters, see IApplicationActivationManager::ActivateApplication method (MSDN).

#include <ShObjIdl.h>
#include <atlbase.h>

HRESULT LaunchApp(LPCWSTR AUMID)
{
     HRESULT hr = CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED);
     if (FAILED(hr))
     {
            wprintf(L"LaunchApp %s: Failed to init COM. hr = 0x%08lx \n", AUMID, hr);
     }
     {
            CComPtr<IApplicationActivationManager> AppActivationMgr = nullptr;
            if (SUCCEEDED(hr))
            {
                   hr = CoCreateInstance(CLSID_ApplicationActivationManager, nullptr,  
CLSCTX_LOCAL_SERVER, IID_PPV_ARGS(&AppActivationMgr));
                   if (FAILED(hr))
                   {
                         wprintf(L"LaunchApp %s: Failed to create Application Activation 
Manager. hr = 0x%08lx \n", AUMID, hr);
                   }
            }
            if (SUCCEEDED(hr))
            {
                   DWORD pid = 0;
                   hr = AppActivationMgr->ActivateApplication(AUMID, nullptr, AO_NONE, 
&pid);
                   if (FAILED(hr))
                   {
                         wprintf(L"LaunchApp %s: Failed to Activate App. hr = 0x%08lx 
\n", AUMID, hr);
                   }
            }
     }
     CoUninitialize();
     return hr;
}

Este método admite los argumentos que se pasan, a diferencia del método para iniciar anterior (es decir, la línea de comandos).It is worth noting that this method does support arguments being passed in, unlike the previous method for launching (that is, using the command line).

Aceptar argumentosAccepting arguments

Para aceptar los argumentos pasados en la activación de la aplicación para UWP, debes agregar código a la aplicación.To accept arguments passed in on activation of the UWP app, you must add some code to the app. Para determinar si se produjo la activación de protocolo o la activación de inicio, invalida el evento OnActivated y comprueba el tipo de argumento y, después, obtén la cadena sin procesar o los valores analizados previamente del objeto de URI.To determine if protocol activation or launch activation occurred, override the OnActivated event and check the argument type, and then get the raw string or Uri object’s pre-parsed values.

En este ejemplo se muestra cómo obtener la cadena sin procesar.This example shows how to get the raw string.

void OnActivated(IActivatedEventArgs^ args)
{
        // Check for launch activation
        if (args->Kind == ActivationKind::Launch)
        {
            auto launchArgs = static_cast<LaunchActivatedEventArgs^>(args); 
            Platform::String^ argval = launchArgs->Arguments;
            // Manipulate arguments …
        }

        // Check for protocol activation
        if (args->Kind == ActivationKind::Protocol)
        {
            auto protocolArgs = static_cast< ProtocolActivatedEventArgs^>(args);
            Platform::String^ argval = protocolArgs->Uri->ToString();
            // Manipulate arguments …
        }
}

ResumenSummary

En resumen, puedes usar distintos métodos para iniciar la aplicación para UWP.In summary, you can use various methods to launch the UWP app. Dependiendo de los requisitos y de los casos de uso, algunos métodos pueden resultar más adecuados que otros.Depending on the requirements and use cases, different methods may be better suited than others.

Vea tambiénSee also