Поделиться через


Automate launching Windows 10 UWP apps (Автоматизация запуска приложений UWP для Windows 10)

Введение

Разработчики имеют несколько вариантов для автоматического запуска приложений универсальная платформа Windows (UWP). В этом документе мы рассмотрим методы запуска приложения с помощью активации протокола и запуска активации.

Активация протокола позволяет приложению зарегистрировать себя в качестве обработчика для заданного протокола.

Активация запуска — это обычный запуск приложения, например запуск с плитки приложения.

При каждом методе активации вы можете использовать командную строку или приложение средства запуска. Для всех методов активации, если приложение запущено в данный момент, активация приведет приложение к переднему плану (который повторно активирует его) и предоставит новые аргументы активации. Это позволяет гибко использовать команды активации для предоставления новых сообщений приложению. Важно отметить, что проект необходимо скомпилировать и развернуть для метода активации для запуска обновленного приложения.

Активация протокола

Выполните следующие действия, чтобы настроить активацию протокола для приложений:

  1. Откройте файл Package.appxmanifest в Visual Studio.

  2. Выберите вкладку "Объявления".

  3. В раскрывающемся списке "Доступные объявления" выберите "Протокол" и нажмите кнопку "Добавить".

  4. В разделе "Свойства" в поле "Имя" введите уникальное имя для запуска приложения.

    Активация протокола

  5. Сохраните файл и разверните проект.

  6. После развертывания проекта необходимо установить активацию протокола.

  7. Перейдите к панель управления\All панель управления Items\Default Program и выберите "Связать тип файла или протокол" с определенной программой. Прокрутите страницу до раздела "Протоколы" , чтобы узнать, указан ли протокол.

Теперь, когда активация протокола настроена, у вас есть два варианта (приложение командной строки или средства запуска) для активации приложения с помощью протокола.

Командная строка

Приложение может быть активировано протоколом с помощью командной строки с командой, за которой следует набор имен протокола ранее, двоеточие (":"), а также любые параметры. Параметры могут быть любой произвольной строкой; Однако для использования возможностей универсального идентификатора ресурса (URI) рекомендуется использовать стандартный формат URI:

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

Объект URI имеет методы синтаксического анализа строки URI в этом формате. Дополнительные сведения см. в классе URI (MSDN).

Примеры:

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

Активация командной строки протокола поддерживает символы Юникода до ограничения 2038 символов в необработанном URI.

Приложение средства запуска

Для запуска создайте отдельное приложение, которое поддерживает API WinRT. Код C++ для запуска с активацией протокола в программе запуска показан в следующем примере, где URI пакета является универсальным кодом ресурса (URI ) для приложения с любыми аргументами, например myapplication: или 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;
       }
}

Активация протокола с помощью приложения средства запуска имеет те же ограничения для аргументов, что и активация протокола с помощью командной строки. Оба поддерживают символы Юникода до ограничения в 2038 символов в необработанном универсальном коде ресурса (URI).

Запуск активации

Вы также можете запустить приложение с помощью активации запуска. Настройка не требуется, но требуется идентификатор пользовательской модели приложения (AUMID) приложения UWP. AUMID — это имя семейства пакетов, за которым следует восклицательный знак и идентификатор приложения.

Лучший способ получить имя семейства пакетов — выполнить следующие действия:

  1. Откройте файл Package.appxmanifest.

  2. На вкладке "Упаковка" введите имя пакета.

    Запуск активации

  3. Если имя семейства пакетов не указано, откройте PowerShell и выполните команду>get-appxpackage MyPackageName, чтобы найти PackageFamilyName.

Идентификатор приложения можно найти в файле Package.appxmanifest (открытом в xml-представлении) в элементе <Applications> .

Командная строка

Средство для выполнения активации запуска приложения UWP устанавливается с помощью пакета SDK для Windows 10. Его можно запустить из командной строки, и он принимает AUMID приложения для запуска в качестве аргумента.

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

Это будет выглядеть примерно так:

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

Этот параметр не поддерживает аргументы командной строки.

Приложение средства запуска

Вы можете создать отдельное приложение, которое поддерживает использование COM для запуска. В следующем примере показан код C++ для запуска с активацией запуска в программе запуска. С помощью этого кода можно создать объект ApplicationActivationManager и вызвать АктивациюApplication , передаваемую ранее и любые аргументы AUMID. Дополнительные сведения о других параметрах см. в разделе "Метод IApplicationActivationManager::ActivateApplication" (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;
}

Следует отметить, что этот метод поддерживает передаваемые аргументы, в отличие от предыдущего метода запуска (то есть с помощью командной строки).

Прием аргументов

Чтобы принять аргументы, переданные при активации приложения UWP, необходимо добавить в приложение код. Чтобы определить, произошла ли активация протокола или активация запуска, переопределите событие OnActivated и проверьте тип аргумента, а затем получите предварительно проанализированные значения необработанной строки или объекта URI.

В этом примере показано, как получить необработанную строку.

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 …
		}
}

Итоги

В сводке можно использовать различные методы для запуска приложения UWP. В зависимости от требований и вариантов использования различные методы могут быть лучше подходят, чем другие.

См. также