STARTUPINFO si = {sizeof(STARTUPINFO)};
PROCESS_INFORMATION pi;
si.cb = sizeof(STARTUPINFO);
printf("CreateProcess(n): %x\nGLE: %x\n", CreateProcess(L"C:\\Windows\\System32\\osk.exe", NULL, 0, 0, false, NULL, 0, 0, &si, &pi), GetLastError());
打印 CreateProcess(n): 0\nGLE: 0
并且没有启动任何程序。
而当我用 C:\\Windows\\Notepad.exe
替换文件位置时,记事本会启动。
(x64 项目在 x64 Windows 10 上执行)。
答案 0 :(得分:0)
正如评论所说,因为在GetLastError
之前调用了CreateProcess
,所以您收到的错误代码为0。
如果调用正确,会返回错误ERROR_ELEVATION_REQUIRED
:
STARTUPINFO si = { sizeof(STARTUPINFO) };
PROCESS_INFORMATION pi;
si.cb = sizeof(STARTUPINFO);
CreateProcess(L"C:\\Windows\\System32\\osk.exe", NULL, 0, 0, false, NULL, 0, 0, &si, &pi);
int e = GetLastError();
printf("%d\n", e);
Microsoft 推荐使用 ShellExecute
:Using the ElevateCreateProcess Fix:
ShellExecute(NULL, L"open", L"C:\\Windows\\System32\\osk.exe", NULL, NULL, SW_SHOWNORMAL);