自动启动 Windows 10 UWP 应用
原文: https://docs.microsoft.com/zh-cn/windows/uwp/xbox-apps/automate-launching-uwp-apps
简介
开发人员有多种选项可用于实现自动启动通用 Windows 平台 (UWP) 应用。 在本文中,我们将探讨通过使用协议激活和启动激活来启动应用的方法。
协议激活允许应用根据给定协议将自身注册为处理程序。
启动激活是正常的应用启动,例如从应用磁贴启动。
通过每个激活方法,你可以选择使用命令行或启动器应用程序。 对于所有的激活方法,如果应用当前正在运行,激活会将应用显示到前台(这将重新激活它)并提供新的激活参数。 这允许灵活使用激活命令向应用提供新消息。 请务必注意,需要针对激活方法编译和部署项目才能运行新更新的应用。
协议激活
按照以下步骤来设置适用于应用的协议激活:
- 在 Visual Studio 中打开 Package.appxmanifest 文件。
- 选择“声明”****选项卡。
- 在“可用声明”*下拉列表中,选择“协议”,然后选择“添加”***。
在“属性”*下的“名称”*字段中,输入唯一名称以启动应用。

保存文件并部署项目。
- 在部署项目后,应设置协议激活。
- 转到“控制面板”\“所有控制面板项”\“默认程序”*,然后选择“将文件类型或协议与特定程序关联”。 滚动到“协议”***部分,查看协议是否列出。
现在设置了协议激活,你可以通过两个选项(命令行或启动器应用程序)使用协议激活应用。
命令行
可以通过使用命令行(命令启动后跟之前设置的协议名称、冒号(“:”)以及任何参数)来协议激活应用。 这些参数可以是任意字符串;但是,为了充分利用统一资源标识符 (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。
获取程序包系列名称的最佳方法是完成以下步骤:
- 打开 Package.appxmanifest 文件。
在“打包”*选项卡上,输入“程序包名称”*。

如果“程序包系列名称”*未列出,请打开 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 应用的更多相关文章
- Mobilize.Net Silverlight bridge to Windows 10 UWP
Windows UWP 既 Windows 10 Universal Windows platform,这个微软基于Windows NT内核的个运行时(Runtime)平台,此平台横跨所有的 Wind ...
- DevExpress Windows 10 UWP Controls新版亮点
行业领先的.NET界面控件2018年第二次重大更新——DevExpress v18.2日前正式发布,本站将以连载的形式为大家介绍新版本新功能.本文将介绍了DevExpress Windows 10 U ...
- DevExpress v18.1新版亮点——Windows 10 UWP篇
用户界面套包DevExpress v18.1日前终于正式发布,本站将以连载的形式为大家介绍各版本新增内容.本文将介绍了DevExpress Windows 10 UWP v18.1 的新功能,快来下载 ...
- 修改 Windows 10 UWP 应用任务栏图标
修改 Windows 10 UWP 应用任务栏图标 Windows 7 时代,修改任务栏图标很简单,右键打开属性,更改图标即可.但步入 Windows 8 之后,随着应用商店 UWP 应用的问世,可以 ...
- Windows 10 UWP开发:如何去掉ListView默认的选中效果
原文:Windows 10 UWP开发:如何去掉ListView默认的选中效果 开发UWP的时候,很多人会碰到一个问题,就是ListView在被数据绑定之后经常有个默认选中的效果,就像这样: 而且它不 ...
- 面向初学者的 Windows 10 UWP 应用开发
眼看 Windows 10 for Mobile 正式版也快要推送了,就先挖个坑吧,原文视频链接为:Windows 10 development for absolute beginners,以下博客 ...
- Windows 10 UWP程序标题栏设置
在Windows 10程序中,以前只能用于全屏方式的Metro程序现在可以运行在窗口模式下了,并且改了个新名字,叫Windows 通用程序(Universal Windows app),简称UWP程序 ...
- 设置UWP程序自启动(Automate launching Windows 10 UWP apps)
在开发UWP程序的过程中,有时候需要设置程序的自启.本人实现的步骤如下: 1.在VS中激活Protocol (Package.appxmanifest --> Declarations --&g ...
- Windows 10 UWP 部署
原文 http://youthlin.com/20151105.html 我们知道VS连接手机可以直接部署到手机里,但平板貌似无法这样干,平板与电脑连接没有丝毫反应……那么想看VS里写的uwp应 ...
随机推荐
- JAVA生成二维码并转化为二进制在页面展示
引用jar包: zxing的core包,下载路径可参考:http://download.csdn.net/detail/sxg0205/9461106 java代码: 引用包: import java ...
- linux文件管理小结之自己定义more
1.more命令功能 more命令用于查看内容超过一屏的文本(相似于cat) 基本功能: 1.输入backspace :内容翻一屏 2.输入enter : 内容翻一行 3.输入q:退出 4.实时显示已 ...
- iOS Animation具体解释
iOS Animation具体解释 本篇仅仅要解说iOS中动画的使用. Animtion主要分为两类:UIView动画和CoreAnimation动画. UIView动画有UIView属性动画,UIV ...
- Matlab矩阵基础
一.创建矩阵 1.通过直接赋值创建矩阵 将矩阵元素置于[]中.同行元素之间用空格或"."分开.行与行之间用":"隔开. >> a=[1,2,3;4, ...
- erlang抽象码与basho的protobuf
erlang抽象码与basho的protobuf(一)使用 erlang抽象码与basho的protobuf(二)代码生成原理之词法与语法分析 erlang抽象码与basho的protobuf(三)代 ...
- NOIP模拟1717 总结
总结 T1: 有x个人在a时b分来,c时d分离开,求所有时刻中人数的最大值. 差分裸题,当然也可以写线段树. 第一题一般来说思维都不会太复杂,如果打的时间很长,便要调整自己的思路,要保证A掉. T2: ...
- BZOJ 2064 - 状压DP
传送门 题目大意: 给两个数组, 数组中的两个元素可以合并成两元素之和,每个元素都可以分裂成相应的大小,问从数组1变化到数组2至少需要多少步? 题目分析: 看到数据范围\(n<=10\), 显然 ...
- jeesuite分布式框架环境搭建
一.简述 这是菜鸟走向开源的第一步.开源项目jeesuite:http://git.oschina.net/vakinge/jeesuite-libs jeesuite是托管在码云上的开源项目,是一个 ...
- Hibernate——(6)延迟加载机制
一.延迟加载机制的基本原理 当访问实体对象时,并不是立即到数据库中查找.而是在真正要使用实体对象的时候,才去数据库查询数据. 具备这样功能的方法 session.load(...) query.ite ...
- QImage学习学习
QImage这个类之前用过,无外乎是加载一个图片文件显示出来,并没有做过多的研究,目前工作中用到了灰度图以及图片的像素操作,重新学习了下,记录记录. 一些基本操作方法 获取图像的首地址: const ...