【问题标题】:Visual Studio 2010 CreateProcess() for batch script用于批处理脚本的 Visual Studio 2010 CreateProcess()
【发布时间】:2014-03-17 20:42:08
【问题描述】:

我正在尝试在 Visual Studio 2010 中运行批处理脚本。我正在关注找到的代码 here 以及 MSDN document

创建.exe 时,我在Release 和Debug 文件夹中都创建了running.bat 文件(两种编译方法在运行时都失败)。但是我的程序每次都崩溃并显示错误代码2

main.c - 命令行应用程序

#include "windows.h"
#include "stdio.h"

int main()
{
        STARTUPINFO si;
        PROCESS_INFORMATION pi;

        if( !CreateProcess(NULL,   
        L"cmd.exe /c running.bat",        
        NULL,         
        NULL,         
        TRUE,        
        CREATE_NEW_CONSOLE,            
        NULL,           
        NULL,           
        &si,            
        &pi )           
        ) 
    {
        printf( "CreateProcess failed (%d)\n", GetLastError() );
        return FALSE;
    }

    return 0;
}

【问题讨论】:

    标签: winapi batch-file createprocess


    【解决方案1】:

    STARTUPINFO 是 CreateProcess 函数的 In 参数,但在您的代码中传递的是垃圾。

    STARTUPINFO si = {0};
    si.cb = sizeof(STARTUPINFO);
    etc...
    

    来自MSDN Documentation

    重要调用者负责确保 STARTUPINFO 中的标准句柄字段包含有效的句柄值。即使 dwFlags 成员指定了 STARTF_USESTDHANDLES,这些字段也会原封不动地复制到子进程中。不正确的值会导致子进程行为不端或崩溃。

    至于退出代码2,将批处理文件的完整路径添加到命令中。您可以使用argsGetModuleFileName 检索应用程序的当前目录。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-16
      • 2014-06-14
      • 2014-12-03
      相关资源
      最近更新 更多