自动启动 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应 ...
随机推荐
- IHookHelper的用法
1.实例化IHookHelper 对象: IHookHelper m_hookHelper = new HookHelperClass(); m_hookHelper.Hook = this.axM ...
- source insight 添加自定义macro
打开C:\Documents and Settings\xxxx\My Documents\Source Insight\Projects\Base文件夹下的em文件,可以看到都是由macro定义的一 ...
- html+css+js实现狼吃羊小游戏
html+css+js实现狼吃羊小游戏 一.总结 一句话总结:给动的元素下标记,这里表现为将要活动的标签动态增加class,这是一种很好的思想. 1.如何实现棋子走动的时候简单精确定位? 用重构坐标系 ...
- [Ramda] R.project -- Select a Subset of Properties from a Collection of Objects in Ramda
In this lesson we'll take an array of objects and map it to a new array where each object is a subse ...
- Redis数据存储解决方案
http://www.tuicool.com/articles/77nUZn 1.背景 1.1 Redis简介 官方网站: http://redis.io/ ,Redis是REmote DIction ...
- 利用for循环的嵌套输出图形--课后作业
for (int i = 1; i <= 8; i++) { int a, b; for (a = 1; a < i; a++) Console.Write(" "); ...
- Qt单元测试工具 QTestlib(QVERIFY, QFETCH, QCOMPARE等)
优点: QTestLib提供了单元测试框架的基本功能,并提供了针对GUI测试的扩展功能. 特性 详细描述 轻量级 QTestlib 只包含 6000行代码和 60个导出符号. 自包含 对于非GUI测 ...
- QT类库与Delphi VCL类库的体系结构对比——两者十分类似!
今天在看QT对象内存管理的一篇文章时:http://blog.csdn.net/dbzhang800/article/details/6300025想到了一个问题:就是QT类库体系结构与Delphi类 ...
- SpringMVC“Ambiguous mapping found. Cannot map 'XXXController' bean method”解决方法
[转 :http://www.fanfanyu.cn/news/staticpagefile/2351.html] 最近在开发项目的过程中SpringMVC抛了个"Ambiguous map ...
- SQLite做为本地缓存的应用需要注意的地方
原文:SQLite做为本地缓存的应用需要注意的地方 今天看到了园友陆敏计的一篇文章<<C#数据本地存储方案之SQLite>>, 写到了SQLite的诸多优点,尤其适应于本地数据 ...