標籤:一起 必須 技術 clu nic 欄位 ack parameter png
原文: https://docs.microsoft.com/zh-cn/windows/uwp/xbox-apps/automate-launching-uwp-apps
簡介
開發人員有多種選項可用於實現自動啟動通用 Windows 平台 (UWP) 應用。 在本文中,我們將探討通過使用協議啟用和啟動啟用來啟動應用的方法。
協議啟用允許應用根據給定協議將自身註冊為處理常式。
啟動啟用是正常的應用啟動,例如從應用程式磚啟動。
通過每個啟用方法,你可以選擇使用命令列或啟動器應用程式。 對於所有的啟用方法,如果應用當前正在運行,啟用會將應用顯示到前台(這將重新啟用它)並提供新的啟用參數。 這允許靈活使用啟用命令嚮應用提供新訊息。 請務必注意,需要針對啟用方法編譯和部署項目才能運行新更新的應用。
協議啟用
按照以下步驟來設定適用於應用的協議啟用:
- 在 Visual Studio 中開啟 Package.appxmanifest 檔案。
- 選擇“聲明”****選項卡。
- 在“可用聲明”*下拉式清單中,選擇“協議”,然後選擇“添加”***。
在“屬性”*下的“名稱”*欄位中,輸入唯一名稱以啟動應用。
儲存檔案並部署項目。
- 在部署項目後,應設定協議啟用。
- 轉到“控制台”\“所有控制台項”\“預設程式”*,然後選擇“將檔案類型或協議與特定程式關聯”。 滾動到“協議”***部分,查看協議是否列出。
現在設定了協議啟用,你可以通過兩個選項(命令列或啟動器應用程式)使用協議啟用應用。
命令列
可以通過使用命令列(命令啟動後跟之前設定的協議名稱、冒號(“:”)以及任何參數)來協議啟用應用。 這些參數可以是任一字元串;但是,為了充分利用統一資源識別項 (URI) 功能,建議遵循標準的 URI 格式:
複製
scheme://username:[email protected]: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 app的應用程式使用者模型 ID (AUMID)。 AUMID 是程式套件系列名稱,後跟一個驚嘆號和應用程式識別碼。
擷取程式套件系列名稱的最佳方法是完成以下步驟:
- 開啟 Package.appxmanifest 檔案。
在“打包”*選項卡上,輸入“程式包名稱”*。
如果“程式套件系列名稱”*未列出,請開啟 PowerShell 並運行 >get-appxpackage MyPackageName
來尋找 *PackageFamilyName。
在 <Applications>
元素下的 Package.appxmanifest 檔案(在 XML 視圖中開啟)中可找到應用程式識別碼。
命令列
用於執行 UWP app啟動啟用的工具隨 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 app時接受傳入的參數,必須向該應用添加一些代碼。 若要確定進行的是協議啟用還是啟動啟用,請替代 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 app。 根據要求和使用方式,可能還有更適合的其他方法。
自動啟動 Windows 10 UWP app