原文: https://docs.microsoft.com/zh-cn/windows/uwp/xbox-apps/automate-launching-uwp-apps

简介

开发人员有多种选项可用于实现自动启动通用 Windows 平台 (UWP) 应用。 在本文中,我们将探讨通过使用协议激活和启动激活来启动应用的方法。

协议激活允许应用根据给定协议将自身注册为处理程序。

启动激活是正常的应用启动,例如从应用磁贴启动。

通过每个激活方法,你可以选择使用命令行或启动器应用程序。 对于所有的激活方法,如果应用当前正在运行,激活会将应用显示到前台(这将重新激活它)并提供新的激活参数。 这允许灵活使用激活命令向应用提供新消息。 请务必注意,需要针对激活方法编译和部署项目才能运行新更新的应用。

协议激活

按照以下步骤来设置适用于应用的协议激活:

  1. 在 Visual Studio 中打开 Package.appxmanifest 文件。
  2. 选择“声明”****选项卡。
  3. 在“可用声明”*下拉列表中,选择“协议”,然后选择“添加”***。
  4. 在“属性”*下的“名称”*字段中,输入唯一名称以启动应用。

  5. 保存文件并部署项目。

  6. 在部署项目后,应设置协议激活。
  7. 转到“控制面板”\“所有控制面板项”\“默认程序”*,然后选择“将文件类型或协议与特定程序关联”。 滚动到“协议”***部分,查看协议是否列出。

现在设置了协议激活,你可以通过两个选项(命令行或启动器应用程序)使用协议激活应用。

命令行

可以通过使用命令行(命令启动后跟之前设置的协议名称、冒号(“:”)以及任何参数)来协议激活应用。 这些参数可以是任意字符串;但是,为了充分利用统一资源标识符 (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

协议命令行激活在原始 URI 上最多支持 2038 个 Unicode 字符。

启动器应用程序

若要启动,请单独创建一个支持 WinRT API 的应用程序。 以下示例中显示了启动程序中用于通过协议激活启动的 C++ 代码,其中 PackageURI 是适用于具有任何参数的应用程序的 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;
}
}

启动器应用程序的协议激活与命令行的协议激活具有相同的参数限制。 二者在原始 URI 上都最多支持 2038 个 Unicode 字符。

启动激活

你还可以通过使用启动激活来启动应用。 不需要进行设置,但需要 UWP 应用的应用程序用户模型 ID (AUMID)。 AUMID 是程序包系列名称,后跟一个感叹号和应用程序 ID。

获取程序包系列名称的最佳方法是完成以下步骤:

  1. 打开 Package.appxmanifest 文件。
  2. 在“打包”*选项卡上,输入“程序包名称”*。

  3. 如果“程序包系列名称”*未列出,请打开 PowerShell 并运行 >get-appxpackage MyPackageName 来查找 *PackageFamilyName

在 <Applications> 元素下的 Package.appxmanifest 文件(在 XML 视图中打开)中可找到应用程序 ID。

命令行

用于执行 UWP 应用启动激活的工具随 Windows 10 SDK 一起安装。 该工具可以从命令行运行,并且它会将应用的 AUMID 作为一个参数启动。

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

它看起来如下所示:

CMD命令:

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

此选项不支持命令行参数。

C#代码: Process.Start(new ProcessStartInfo(@"C:\Program Files (x86)\Windows Kits\10\App Certification Kit\microsoft.windows.softwarelogo.appxlauncher.exe", "acad3bbc-56cd-47d1-9aff-a8ef2e7ad58f_75cr2b68sm664!AppId"));

启动器应用程序

你可以单独创建一个支持使用 COM 的应用程序以用于启动。 以下示例显示启动程序中用于通过启动激活启动的 C++ 代码。 使用此代码,你可以创建 ApplicationActivationManager 对象并调用传入之前查找的 AUMID 的 ActivateApplication 和任何参数。 有关其他参数的详细信息,请参阅 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 应用。 根据要求和使用情况,可能还有更适合的其他方法。

自动启动 Windows 10 UWP 应用的更多相关文章

  1. Mobilize.Net Silverlight bridge to Windows 10 UWP

    Windows UWP 既 Windows 10 Universal Windows platform,这个微软基于Windows NT内核的个运行时(Runtime)平台,此平台横跨所有的 Wind ...

  2. DevExpress Windows 10 UWP Controls新版亮点

    行业领先的.NET界面控件2018年第二次重大更新——DevExpress v18.2日前正式发布,本站将以连载的形式为大家介绍新版本新功能.本文将介绍了DevExpress Windows 10 U ...

  3. DevExpress v18.1新版亮点——Windows 10 UWP篇

    用户界面套包DevExpress v18.1日前终于正式发布,本站将以连载的形式为大家介绍各版本新增内容.本文将介绍了DevExpress Windows 10 UWP v18.1 的新功能,快来下载 ...

  4. 修改 Windows 10 UWP 应用任务栏图标

    修改 Windows 10 UWP 应用任务栏图标 Windows 7 时代,修改任务栏图标很简单,右键打开属性,更改图标即可.但步入 Windows 8 之后,随着应用商店 UWP 应用的问世,可以 ...

  5. Windows 10 UWP开发:如何去掉ListView默认的选中效果

    原文:Windows 10 UWP开发:如何去掉ListView默认的选中效果 开发UWP的时候,很多人会碰到一个问题,就是ListView在被数据绑定之后经常有个默认选中的效果,就像这样: 而且它不 ...

  6. 面向初学者的 Windows 10 UWP 应用开发

    眼看 Windows 10 for Mobile 正式版也快要推送了,就先挖个坑吧,原文视频链接为:Windows 10 development for absolute beginners,以下博客 ...

  7. Windows 10 UWP程序标题栏设置

    在Windows 10程序中,以前只能用于全屏方式的Metro程序现在可以运行在窗口模式下了,并且改了个新名字,叫Windows 通用程序(Universal Windows app),简称UWP程序 ...

  8. 设置UWP程序自启动(Automate launching Windows 10 UWP apps)

    在开发UWP程序的过程中,有时候需要设置程序的自启.本人实现的步骤如下: 1.在VS中激活Protocol (Package.appxmanifest --> Declarations --&g ...

  9. Windows 10 UWP 部署

      原文  http://youthlin.com/20151105.html 我们知道VS连接手机可以直接部署到手机里,但平板貌似无法这样干,平板与电脑连接没有丝毫反应……那么想看VS里写的uwp应 ...

随机推荐

  1. [Angular] Scrolling the Message List To the Bottom Automatically Using OnChanges

    Let's say the message list can Input (messages) from parent component, and what we want to do is whe ...

  2. JBoss AS 7之初步了解(The Return Of The King)

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvam9obl9mX2xhdQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQk ...

  3. C++/Php/Python/Shell 程序按行读取文件或者控制台方法总结。

    C++/Php/Python/Shell 程序按行读取文件或者控制台方法总结. 一.总结 C++/Php/Python/Shell 程序按行读取文件或者控制台(php读取标准输入:$fp = fope ...

  4. js中如何删除某个元素下面的所有子元素?(两种方法)

    js中如何删除某个元素下面的所有子元素?(两种方法) 一.总结 方法一:通过元素的innerHTML属性 元素element.innerHTML=""; 方法二:通过元素的remo ...

  5. Android addTextChangedListener(文本监听)参数解释及实现EditText字数监听

    由于最近做项目要检测EditText中输入的字数长度,从而接触到了Android中EditText的监听接口,TextWatcher.它有三个成员方法,第一个after很简单,这个方法就是在EditT ...

  6. 关于用WebView或手机浏览器打开连接问题

    1.通常情况下 大家可能都想使用WebView打开网页内部链接而不想再调用手机浏览器,我们可以通过以下两种方法实现: (1)为WebView设置一个WebViewClient,并重写shouldOve ...

  7. js实现去文本换行符小工具

    js实现去文本换行符小工具 一.总结 一句话总结: 1.vertical属性使用的时候注意看清定义,也注意父元素的基准线问题.vertical-align:top; 2.获取textareaEleme ...

  8. 从张量积(tensor product)到多重线性代数(multilinear algebra)

    记张量积的数学记号为 ⊗. 1. linear 假设 V,W 为线性空间(vector spaces),f:V→W是线性(linear)的,如果满足: f(v1+v2)=f(v1)+f(v2)f(αv ...

  9. NSNull 和 nil 的判断

    情况1. 等于Null if ([_content isEqual:[NSNull null]] ) { //等于Null } 情况2.  等于nil if (_content==nil || [_c ...

  10. Android核心功能开发SearchView使用的开发(代码共享)

    在Android上.搜索是一个核心的用户功能.用户可以搜索可用的任何数据,的内容是否存储在设备本身或者需要促进网络接入上.Android它提供了一个框架,为用户创造一个一致的搜索的搜索体验,它可以帮你 ...