Winapi 创建过程C++;不';不要创建任何进程 我是C++中的新手,试图使用调试API,但我甚至不能启动。因为我无法通过CreateProcess api运行任何exe。它不会给出任何编译错误,但会返回false。你有什么建议吗 LPCWSTR appName = LPCWSTR("C:\\TEST.EXE"); LPSTARTUPINFO sInfo = LPSTARTUPINFO(); LPPROCESS_INFORMATION pInfo = LPPROCESS_INFORMATION(); if (CreateProcess(appName,NULL,NULL,NULL,FALSE,CREATE_SUSPENDED,NULL,NULL,sInfo,pInfo)) { printf("done!"); } else { printf("error!"); }

Winapi 创建过程C++;不';不要创建任何进程 我是C++中的新手,试图使用调试API,但我甚至不能启动。因为我无法通过CreateProcess api运行任何exe。它不会给出任何编译错误,但会返回false。你有什么建议吗 LPCWSTR appName = LPCWSTR("C:\\TEST.EXE"); LPSTARTUPINFO sInfo = LPSTARTUPINFO(); LPPROCESS_INFORMATION pInfo = LPPROCESS_INFORMATION(); if (CreateProcess(appName,NULL,NULL,NULL,FALSE,CREATE_SUSPENDED,NULL,NULL,sInfo,pInfo)) { printf("done!"); } else { printf("error!"); },winapi,createprocess,Winapi,Createprocess,sInfo和pInfo未指向有效内存(错误代码87表示参数不正确)。改为: STARTUPINFO sInfo = { sizeof(sInfo }; TCHAR desktop[] = TEXT("winsta0\\default"); sInfo.lpDesktop = desktop; PROCESS_INFORMATION pInfo; 并将对象的地址传递给CreateProcess()(即&sInfo,&pInfo)。sInfo和pInfo未指向有效内存(错误代码87表示参数不正确)

sInfo
pInfo
未指向有效内存(错误代码
87
表示参数不正确)。改为:

STARTUPINFO sInfo = { sizeof(sInfo };
TCHAR desktop[] = TEXT("winsta0\\default");
sInfo.lpDesktop = desktop;
PROCESS_INFORMATION pInfo;

并将对象的地址传递给
CreateProcess()
(即
&sInfo,&pInfo
)。

sInfo
pInfo
未指向有效内存(错误代码
87
表示参数不正确)。改为:

STARTUPINFO sInfo = { sizeof(sInfo };
TCHAR desktop[] = TEXT("winsta0\\default");
sInfo.lpDesktop = desktop;
PROCESS_INFORMATION pInfo;

并将对象的地址传递给
CreateProcess()
(即
&sInfo,&pInfo
)。

使用GetLastError()获取失败原因的信息。87。我搜索过它,我发现它是关于参数的,但是哪一个和为什么:)?是的,“一个或多个参数不正确”不是很有用。很高兴有人给了你正确的答案。使用GetLastError()获取失败原因的信息。87。我搜索过它,我发现它是关于参数的,但是哪一个和为什么:)?是的,“一个或多个参数不正确”不是很有用。很高兴有人给了你正确的答案。谢谢你提供的信息,我做了更改,但现在给出了错误2。是关于文件路径的吗?我肯定文件在那里。@hali告诉他,是的。Windows中的一个方便实用程序是“net helpmsg
”,当提供描述时。他的appname也错了,将const char*转换为LPCWSTR生成中文。感谢您的回答。我已将CreateProcess更改为CreateProcessA,并使用LPCSTR而不是LPCWSTR。现在它工作得很好。但是我想知道为什么像“LPSTARTUPINFO sInfo=LPSTARTUPINFO();”这样的初始化不起作用,也不会出现任何错误?您创建了一个名为“sInfo”的指向STARTUPINFO的指针,然后将其初始化为另一个指向STARTUPINFO的临时指针。感谢您提供的信息,我做了更改,但现在给出了错误2。是关于文件路径的吗?我肯定文件在那里。@hali告诉他,是的。Windows中的一个方便实用程序是“net helpmsg
”,当提供描述时。他的appname也错了,将const char*转换为LPCWSTR生成中文。感谢您的回答。我已将CreateProcess更改为CreateProcessA,并使用LPCSTR而不是LPCWSTR。现在它工作得很好。但我想知道为什么像“LPSTARTUPINFO sInfo=LPSTARTUPINFO();”这样的初始化不起作用,也不会给出任何错误?您创建了一个名为“sInfo”的指向STARTUPINFO的指针,然后将该指针初始化为另一个指向STARTUPINFO的临时指针。