我需要我的简单程序帮助,该程序试图创建运行语音识别的新进程。 当我打开cmd并输入命令C:\Windows\Speech\Common\sapisvr.exe -SpeechUX
时,语音识别将成功启动。它即使在通过system(C:\\Windows\\...)
运行时也会启动,它基本上只是模仿cmd。 但是,如下所示使用CreateProcess()创建新进程时,该函数失败。如果我把整个路径和参数到第二个参数CreateProcess(NULL, TEXT("C:\\Windows...\\sapisvr.exe -SpeechUX"), ...)
,然后我得到一个运行时异常:访问冲突写入位置使用C++中的CreateProcess()启动语音识别
#include <windows.h>
int main()
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));
if (!CreateProcess(
TEXT("C:\\Windows\\Speech\\Common\\sapisvr.exe"), //Module name
TEXT(" -SpeechUX"), //command line params
NULL, //Process attributes
NULL, //Thread attributes
FALSE, //Handle inheritance
0, //No creation flags
NULL, //Use parent's environment
NULL, //Use parent's starting directory
&si, //Pointer to STARTUPINFO structure
&pi)) //Pointer to PROCESS_INFORMATION structure
{
printf("error creating process\n");
return 1;
}
WaitForSingleObject(pi.hProcess, INFINITE);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
return 0;
}
首先,我试图测试CreateProcess函数与参数运行记事本打开现有的文件。当我把notepad.exe的路径放到命令行参数的第一个参数和文件名时,它没有识别它,而是打开了一个新文件。
这整个适用于试图从我的程序运行msconfig.exe,它不采取任何参数,所以我想这个问题是在别的地方,我只是不知道在哪里。 我搜索了网页,但没有任何答案对我有用。我正在Windows 8.1上使用Visual Studio 2015。
感谢您的帮助。
CreateProcess的第二个参数必须是可写的缓冲区,而不是字符串文字。 – PaulMcKenzie
@PaulMcKenzie:只有在调用'CreateProcessA()'时才会调用'CreateProcessA()',而不是调用'CreateProcessA()'时调用。 –