Я заметил, что 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 может предоставить больше информации?