我一直在尝试制作一个使用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()我甚至无法调用进程本身。
感谢。
答案 0 :(得分:2)
标记为" requireAdministrator"的可执行文件。在其清单中无法使用CreateProcess()
从非提升的进程启动。而是返回ERROR_ELEVATION_REQUIRED。必须使用ShellExecute()
或ShellExecuteEx()
。
runas
动词用于启动需要提升用户权限的程序。在你的情况下,你有权利,但程序没有。 ShellExecute为您提供更多权利。
ShellExecute(NULL, "runas", "C:\\Windows\\Speech\\Common\\sapisvr.exe", param, 0, SW_SHOWNORMAL);
的文档