Winapi 用于批处理脚本的Visual Studio 2010 CreateProcess()

Winapi 用于批处理脚本的Visual Studio 2010 CreateProcess(),winapi,batch-file,createprocess,Winapi,Batch File,Createprocess,我正在尝试在VisualStudio2010中运行批处理脚本。我正在遵循找到的代码以及 在创建我的.exe时,我在Release和Debug文件夹中创建了running.bat文件(两种编译方法在运行时都失败)。但是,我的程序每次都会崩溃,错误代码为2: main.c-命令行应用程序 #include "windows.h" #include "stdio.h" int main() { STARTUPINFO si; PROCESS_INFORMATION p

我正在尝试在VisualStudio2010中运行批处理脚本。我正在遵循找到的代码以及

在创建我的
.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;
}

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

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

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

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