【问题标题】:Run a batch file using createProcess()使用 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”。 如何将上述字符串作为参数传递给批处理文件?

【问题讨论】:

    标签: windows batch-file createprocess


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多