微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

CreateProcess 因系统程序失败?

如何解决CreateProcess 因系统程序失败?

    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,false,&si,&pi),GetLastError());

打印 CreateProcess(n): 0\nGLE: 0 并且没有启动任何程序。 而当我用 C:\\Windows\\Notepad.exe 替换文件位置时,记事本会启动。 (x64 项目在 x64 Windows 10 上执行)。

解决方法

正如评论所说,因为在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,false,&si,&pi);
    int e = GetLastError();
    printf("%d\n",e);

enter image description here

Microsoft 推荐使用 ShellExecuteUsing the ElevateCreateProcess Fix

ShellExecute(NULL,L"open",L"C:\\Windows\\System32\\osk.exe",SW_SHOWNORMAL);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。