CreateProcess,第一个参数问题

时间:2011-01-23 23:24:05

标签: c++ windows

我正在尝试创建一个名为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;
    }
}

3 个答案:

答案 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"。微软更喜欢路径中的反斜杠。在某些上下文中接受正斜杠,但在代码中通常存在问题。