用于批处理脚本的 Visual Studio 2010 CreateProcess()
Posted
技术标签:
【中文标题】用于批处理脚本的 Visual Studio 2010 CreateProcess()【英文标题】:Visual Studio 2010 CreateProcess() for batch script 【发布时间】: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;
【问题讨论】:
【参考方案1】:STARTUPINFO 是 CreateProcess 函数的 In 参数,但在您的代码中传递的是垃圾。
STARTUPINFO si = 0;
si.cb = sizeof(STARTUPINFO);
etc...
来自MSDN Documentation:
重要调用者负责确保 STARTUPINFO 中的标准句柄字段包含有效的句柄值。即使 dwFlags 成员指定了 STARTF_USESTDHANDLES,这些字段也会原封不动地复制到子进程中。不正确的值会导致子进程行为不端或崩溃。
至于退出代码2,将批处理文件的完整路径添加到命令中。您可以使用args 或GetModuleFileName 检索应用程序的当前目录。
【讨论】:
以上是关于用于批处理脚本的 Visual Studio 2010 CreateProcess()的主要内容,如果未能解决你的问题,请参考以下文章
从PowerShell设置Visual Studio环境变量
我的 C# win 表单应用程序在内部调用批处理脚本,如何在 Visual Studio 中导出时对最终用户隐藏它?
python BIMEHW - Visual Studio +中的单文件批处理编译器,用于g ++和MSVC
Visual Studio Post-Build 事件调用带有空格的参数的批处理文件