2016-02-13 1 views
0

Я пытался создать программу, которая использует CreateProcess() для запуска распознавания речи в Windows 8.1. После создания процесса я получаю ошибку 740 (нужно повысить). Но когда я запускаю распознавание речи в качестве стандартного пользователя (либо, вызывая C:\Windows\Speech\Common\sapisvr.exe -SpeechUX в cmd, либо открывая его в центре Ease of Access), нет подсказки с просьбой о повышении прав администратора. Почему он запрашивает его, когда я пытаюсь создать тот же процесс программно? Есть ли обходной путь? Мне нужно, чтобы он работал для любого стандартного пользователя.Распознавание речи или msconfig без повышения в C++

//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(), я не могу даже вызвать сам процесс.

Спасибо.

ответ

2

Исполняемый файл, который помечен как «requireAdministrator» в его манифесте, не может быть запущен из процесса без повышения, используя CreateProcess(). Вместо этого возвращается ERROR_ELEVATION_REQUIRED. ShellExecute() или ShellExecuteEx(). Глагол runas используется для запуска программ, требующих повышенных прав пользователя. В вашем случае у вас есть права, но программы нет. ShellExecute дает вам больше прав.

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

Документация ShellExecute

+0

Запуск распознавания речи с помощью 'ShellExecute' все еще заставляет меня с диалогом администратора. – MiragePV

+0

Фактически, запуск 'ShellExecute' со вторым параметром' 'runas'' делает стандартный пользовательский пароль администратора, но его запуск со вторым параметром' NULL' не выполняется. Msconfig нельзя запускать в любом случае. Наверное, сейчас невозможно запустить его без подсказки. – MiragePV

+0

Может быть интересно это [ответить] (http://stackoverflow.com/a/10165196/2050745) –

Смежные вопросы