4

我注意到 CreateProcess自版本 16299 以来就是通用 Windows 平台 API的一部分。

为了测试它,我制作了一个基于空白应用模板 (C++/WinRT) 的快速 UWP 应用,并连接了一个按钮事件处理程序来调用这段代码:

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 应用程序或类似的东西。但是,它在任何地方都没有记录,这就是我在这里问的原因。

有没有人知道这一点,或者微软的人可以提供更多信息吗?

4

0 回答 0