MSDN.WhiteKnight - Stack Overflow answers
Ответ на "Запуск приложения Windows Store из классического desktop приложения"
Answer 1048777
Приложение UWP можно запустить, используя его зарегистрированный протокол:
system("explorer protocol://");
где protocol - имя одного из ключей реестра в разделе
HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\PackageRepository\Packages\(PackageID)\(AppUserModelID)\windows.protocol
Например:
calculator для стандартного калькулятора Windows
microsoft-edge для Microsoft Edge
Приложение Win32, запакованное для Windows Store, можно запустить обычным запуском его exe-файла.
Если приложение UWP не регистрирует ни одного протокола, его можно запустить через его зарегистрированные псевдонимы командной строки: Command-Line Activation of Universal Windows Apps.
Произвольное приложение можно запустить, используя IApplicationActivationManager::ActivateApplication. Пример кода для Visual C++ (требует Windows 8-10 SDK):
#include <stdlib.h> #include <stdio.h> #include <shlobj.h> #include <stdio.h> #include <shobjidl.h> #include <objbase.h> #include <atlbase.h> #include <string> HRESULT LaunchApp(const std::wstring& strAppUserModelId, PDWORD pdwProcessId) { CComPtr<IApplicationActivationManager> spAppActivationManager; HRESULT hrResult = E_INVALIDARG; if (!strAppUserModelId.empty()) { // Instantiate IApplicationActivationManager hrResult = CoCreateInstance(CLSID_ApplicationActivationManager, NULL, CLSCTX_LOCAL_SERVER, IID_IApplicationActivationManager, (LPVOID*)&spAppActivationManager); if (SUCCEEDED(hrResult)) { // This call ensures that the app is launched as the foreground window hrResult = CoAllowSetForegroundWindow(spAppActivationManager, NULL); // Launch the app if (SUCCEEDED(hrResult)) { hrResult = spAppActivationManager->ActivateApplication(strAppUserModelId.c_str(), NULL, AO_NONE, pdwProcessId); } } } return hrResult; } int main(void) { HRESULT hrResult = S_OK; if (SUCCEEDED(CoInitializeEx(NULL, COINIT_APARTMENTTHREADED))) { DWORD dwProcessId; hrResult = LaunchApp(std::wstring(L"Microsoft.WindowsCalculator_8wekyb3d8bbwe!App"), &dwProcessId); //AppUserModelID для стандартного калькулятора if (FAILED(hrResult)) { wprintf(L"Failed with HRESULT 0x%x", (UINT)hrResult); } CoUninitialize(); } getchar(); return 0; }
Для запуска необходим AppUserModelID, который можно найти поиском в реестре по упомянутому выше разделу PackageRepository (имя вложенного ключа) или разделам
HKEY_CLASSES_ROOT\AppX(...)\Application
(значение свойства AppUserModelID).
Content is retrieved from StackExchange API.
Auto-generated by ruso-archive tools.