API::CreateProcess()创建进程失败 返回1

一、CreateProcess 函数定义

BOOL CreateProcess 
( 
LPCTSTR lpApplicationName, //可执行文件的路径
LPTSTR lpCommandLine, //用于指定传递给新进程的命令行参数
LPSECURITY_ATTRIBUTES lpProcessAttributes,//默认NULL
LPSECURITY_ATTRIBUTES lpThreadAttributes, //默认NULL
BOOL bInheritHandles, //默认FALSE
DWORD dwCreationFlags, //设置新进程创建的方式,可使用NORMAL_PRIORITY_CLASS
LPVOID lpEnvironment, //默认NULL
LPCTSTR lpCurrentDirectory, //默认NULL
LPSTARTUPINFO lpStartupInfo, //指向一个STARTUPINFO或STARTUPINFOEX的结构,一般应用程序会仅使用默认值,可以全部置零
LPPROCESS_INFORMATION lpProcessInformation //是一个指向LPPROCESS_INFOMATION结构的指针
); 

具体详细的函数介绍可以参考这篇博客:https://blog.csdn.net/baidu_29198395/article/details/82926348

二、CreateProcess()创建返回1的原因

在我的项目里面并没有使用第一个参数的,而是使用null,所以必须使用第二个参数lpCommandLine,这个参数用于指定传递给新进程的命令行参数,由于我们没有使用第一个参数,所以需要把可执行文件名也包含在lpCommandLine内,lpCommandLine格式如下,第一个参数Control_Station_Win 为执行文件名,后面的就是传递给main函数的参数,所以传入参数需要与int main(int ,int )主函数参数对应。

::sprintf(szCmdLine, "Control_Station_Win %s %d", str1,n);

由于我需要创建的进程main函数只有一个参数所以使用下面的格式:

TCHAR szCmdLine[512]{};
::sprintf(szCmdLine, "Control_Station_Win %s ", str);

我出错的原因有两个,

一、szCmdLine没有初始化

二、%s后面没有加空格

因为szCmdLine该参数的类型是LPTSTR,即一个以’0’结尾的char*的C传统字符串,而关键在于:每个参数以空格隔开,所以第二个参数后面需要加一个空格。如下图所示。

通过这次的bug使我对CreateProcess函数有了更深刻的认识。

 

 

CreateProcess函数是Windows API中的一个函数,用于创建一个新的进程。该函数可以指定要执行的可执行文件、命令行参数、进程安全属性、环境变量等信息,并返回一个表示新进程句柄和主线程句柄的结构体。 函数原型如下: ``` BOOL CreateProcess( LPCSTR lpApplicationName, // 指向应用程序名的指针 LPSTR lpCommandLine, // 命令行参数 LPSECURITY_ATTRIBUTES lpProcessAttributes, // 进程安全属性 LPSECURITY_ATTRIBUTES lpThreadAttributes, // 线程安全属性 BOOL bInheritHandles, // 是否继承父进程句柄 DWORD dwCreationFlags, // 进程创建标志 LPVOID lpEnvironment, // 环境变量指针 LPCSTR lpCurrentDirectory, // 当前目录 LPSTARTUPINFO lpStartupInfo, // 启动信息 LPPROCESS_INFORMATION lpProcessInformation // 进程信息 ); ``` 其中,最常用的参数为lpApplicationName和lpCommandLine,它们分别指定要执行的可执行文件和命令行参数。其他参数根据需要进行设置。 使用CreateProcess函数创建进程的一般流程如下: 1. 准备好启动信息的结构体STARTUPINFO和进程信息的结构体PROCESS_INFORMATION; 2. 调用CreateProcess函数创建进程,并将启动信息结构体和进程信息结构体的指针传递给函数; 3. 在Parent进程中,使用WaitForSingleObject或WaitForMultipleObjects等函数等待子进程结束。 注意:在使用CreateProcess函数时,需要确保被执行的可执行文件已经存在,否则会导致进程创建失败
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值