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

Speech Recognition or msconfig without elevation in C++

我一直在尝试制作一个在 Windows 8.1 上使用 CreateProcess() 到 运行 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() 我什至无法调用进程本身。

谢谢。

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

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

ShellExecute

的文档