В каких случаях CreateProcess можно использовать в UWP? - PullRequest
0 голосов
/ 02 июля 2018

Я заметил, что CreateProcess является частью Универсального API платформы Windows начиная с версии 16299.

Чтобы проверить это, я создал быстрое приложение UWP на основе шаблона пустого приложения (C ++ / WinRT) и подключил обработчик событий кнопки для вызова этого фрагмента кода:

void StartNotepad()
{
    STARTUPINFO startupInfo;
    ZeroMemory(&startupInfo, sizeof(startupInfo));
    startupInfo.cb = sizeof(startupInfo);

    PROCESS_INFORMATION processInformation;
    ZeroMemory(&processInformation, sizeof(processInformation));

    if (!CreateProcess(
        const_cast<LPWSTR>(L"C:\\Windows\\notepad.exe"), //app name
        nullptr,
        nullptr,
        nullptr,
        FALSE,
        0,
        nullptr,
        nullptr,
        &startupInfo,
        &processInformation
    ))
    {
        OutputDebugString(L"CreateProcess failed");
        DWORD err = GetLastError();
    }
    else
    {
        WaitForSingleObject(processInformation.hProcess, INFINITE);
    }
}

Сам вызов API завершается успешно, но процесс, похоже, не запущен. Структуры STARTUPINFO и PROCESS_INFORMATION содержат такую ​​информацию, как PID и TID нового процесса и его основного потока, но они не отображаются в диспетчере задач, и окно также не отображается (очевидно).

Я почти уверен, что это как-то связано с безопасностью, то есть приложение UWP не может запустить приложение не-UWP или что-то в этом роде. Однако это нигде не задокументировано, поэтому я и спрашиваю здесь.

Кто-нибудь понял это, или кто-то из Microsoft может предоставить больше информации?

...