2016-02-13 43 views
0

我一直在試圖製作一個程序,它使用CreateProcess()在Windows 8.1上運行Windows語音識別。在創建一個進程後,我得到錯誤740(需要提升)。但是當我以標準用戶的身份運行語音識別時(通過在cmd中調用C:\Windows\Speech\Common\sapisvr.exe -SpeechUX,或者通過在易於訪問中心中打開它),沒有提示要求我提升爲管理員權限。爲什麼在我嘗試以編程方式創建相同的進程時詢問它?有沒有解決方法?我需要它爲任何標準用戶工作。在C++中沒有提升的語音識別或msconfig

//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

事實上,使用第二個參數「runas」運行'ShellExecute'使得標準用戶需要管理員密碼,但是使用第二個參數'NULL'運行它不會。 Msconfig不能以任何方式啓動。我想現在無法立即運行它是不可能的。 – MiragePV

+0

也許有趣這[回答](http://stackoverflow.com/a/10165196/2050745) –