C ++中没有提升的语音识别或msconfig

时间:2016-02-13 00:15:07

标签: c++ windows process speech-recognition createprocess

我一直在尝试制作一个使用CreateProcess()在Windows 8.1上运行Windows语音识别的程序。创建进程后,我收到错误740(需要提升)。但是,当我将语音识别作为标准用户运行时(通过在cmd中调用C:\Windows\Speech\Common\sapisvr.exe -SpeechUX或在轻松访问中心中打开它),没有提示要求我提升管理员权限。当我尝试以编程方式创建相同的进程时,为什么要求它呢?它有解决方法吗?我需要它适用于任何标准用户。

//This invokes SR without any problem, as well as manually typing into cmd
system("C:\\Windows\\Speech\\Common\\sapisvr.exe -SpeechUX");

//This returns error if not run as admin
TCHAR[] param = TEXT("-SpeechUX");
if (!CreateProcess(TEXT("C:\\Windows\\Speech\\Common\\sapisvr.exe"),
                   param,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi))
{
    printf("error creating process %d", GetLastError());
    return 1;
}

尝试调用msconfig.exe时也会发生同样的情况。我知道msconfig需要更多权限,但据我所知,任何人都应该可以运行它,它应该在运行时请求管理员同意(当点击其中一个选项卡时)。但是使用CreateProcess()我甚至无法调用进程本身。

感谢。

1 个答案:

答案 0 :(得分:2)

标记为" requireAdministrator"的可执行文件。在其清单中无法使用CreateProcess()从非提升的进程启动。而是返回ERROR_ELEVATION_REQUIRED。必须使用ShellExecute()ShellExecuteEx()runas动词用于启动需要提升用户权限的程序。在你的情况下,你有权利,但程序没有。 ShellExecute为您提供更多权利。

ShellExecute(NULL, "runas", "C:\\Windows\\Speech\\Common\\sapisvr.exe", param, 0, SW_SHOWNORMAL);

ShellExecute

的文档