我注意到 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 应用程序或类似的东西。但是,它在任何地方都没有记录,这就是我在这里问的原因。
有没有人知道这一点,或者微软的人可以提供更多信息吗?