我正在尝试创建一个名为s2.exe
的流程。但是,我无法确定需要传递的内容作为第一个参数。我尝试将进程所在的名称和位置放入,但是我得到“错误2启动CC”。第一个参数究竟应该包含哪些内容? (根据MSDN,它是模块的路径。)
int main()
{
PROCESS_INFORMATION po;
STARTUPINFO s;
GetStartupInfo (&s);
if(CreateProcess(L"c:/s2", NULL, NULL, NULL,
false, 0, NULL, NULL, &s, &po) == FALSE)
{
printf("Error %d starting CC\n", GetLastError());
return -1;
}
}
答案 0 :(得分:3)
从2
返回的GetLastError()
值表示ERROR_FILE_NOT_FOUND
。假设c:/s2.exe
实际上在s2.exe
驱动器中,您需要传递c:\
。
请注意CreateProcess()
中lpApplicationName
参数的MSDN文档说明:
字符串可以指定要执行的模块的完整路径和文件名,也可以指定部分名称。对于部分名称,该函数使用当前驱动器和当前目录来完成规范。该功能不会使用搜索路径。 此参数必须包含文件扩展名;假设没有默认扩展名。
另请注意,void main()
不是标准C ++。但是,int main()
是标准C ++,允许您返回某种退出代码。 (我编辑了您的代码段以反映这一点。)
答案 1 :(得分:1)
MSDN说明了CreateProcess
功能的lpApplicationName
:
此参数必须包含文件扩展名;没有默认的扩展名。
答案 2 :(得分:1)
您需要L"c:\s2"
而不是L"c:/s2"
。微软更喜欢路径中的反斜杠。在某些上下文中接受正斜杠,但在代码中通常存在问题。