使用 createProcess() 运行批处理文件

Posted

技术标签:

【中文标题】使用 createProcess() 运行批处理文件【英文标题】:Run a batch file using createProcess() 【发布时间】:2016-11-17 12:05:22 【问题描述】:

是否需要按照文档中的说明将 lpApplicationName 设置为 cmd.exe 才能运行批处理文件?

"port=5598 dbname=demo host=localhost" "port=5599 dbname=demo host=localhost" “C:/tmp/000002AB-1.16432” “C:/bin/pg_restore.exe”

假设批处理文件的路径是“C:/Users/abc.bat”。 如何将上述字符串作为参数传递给批处理文件?

【问题讨论】:

【参考方案1】:

假设一个标准配置,答案是否定的,它不是必需的。您可以在lpCommandLine 参数中包含批处理文件。剩下的参数只是在批处理文件后面加上需要的引号。

test.cmd

@echo off
    setlocal enableextensions disabledelayedexpansion
    echo %1  
    echo %~1
    echo %2  
    echo %~2

test.c

#define _WIN32_WINNT   0x0500
#include <windows.h>

void main(void)

    // Spawn process variables
    STARTUPINFO si;
    PROCESS_INFORMATION pi;

    ZeroMemory( &si, sizeof(si) );
    si.cb = sizeof(si);
    ZeroMemory( &pi, sizeof(pi) );

    CreateProcess(
        NULL
        , "\"test.cmd\" \"x=1 y=2\" \"x=3 y=4\""
        , NULL
        , NULL
        , TRUE
        , 0
        , NULL
        , NULL
        , &si
        , &pi 
    );

    WaitForSingleObject( pi.hProcess, INFINITE );
    CloseHandle( pi.hProcess );
    CloseHandle( pi.hThread );    
;

输出

W:\>test.exe
"x=1 y=2"
x=1 y=2
"x=3 y=4"
x=3 y=4

【讨论】:

以上是关于使用 createProcess() 运行批处理文件的主要内容,如果未能解决你的问题,请参考以下文章

使用 CreateProcess 运行带空格的 bat

CreateProcess 执行批处理文件

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

如何将带有空格的路径作为参数添加到 CreateProcess 批处理文件?

CreateProcess api 在 Windows 10 上失败,错误代码为 122

C++ 如何使用 CreateProcess 来处理进程?