Show / Hide Table of Contents

MSDN.WhiteKnight - Stack Overflow answers

Ответ на "Запуск приложения Windows Store из классического desktop приложения"

Answer 1048777

Link

Приложение 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;
}

Источник: https://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/7cf9693f-0b87-423f-8557-23b61a8c10cc/how-do-i-programmatically-launch-a-windows-store-app-from-my-desktop-app?forum=windowsgeneraldevelopmentissues

Для запуска необходим AppUserModelID, который можно найти поиском в реестре по упомянутому выше разделу PackageRepository (имя вложенного ключа) или разделам HKEY_CLASSES_ROOT\AppX(...)\Application (значение свойства AppUserModelID).


Content is retrieved from StackExchange API.

Auto-generated by ruso-archive tools.

Back to top Stack Overflow answers (published from sources in GitHub repository). Copyright (c) 2020, MSDN.WhiteKnight. Content licensed under BSD 3-Clause License.
Generated by DocFX