2016-11-17 192 views
0

是否需要将lpApplicationName设置为cmd.exe,如文档中提到的那样运行批处理文件?使用createProcess()运行批处理文件()

  • “端口= 5598 DBNAME =演示主机=本地主机”
  • “端口= 5599 DBNAME =演示主机=本地主机”
  • “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