CreateProcess 调用命令行程序显示命令行窗口

时间:2022-09-02 21:55:49
我想在一个GUI的程序中通过CreateProcess调用一个命令行程序,在调试阶段我想让此命令行程序显示出来,我设置了一下参数,但命令行程序一闪而过,请各位帮忙。
代码如下:


      STARTUPINFO rsyncStartInfo;
      rsyncStartInfo.wShowWindow = SW_MAXIMIZE;
      ZeroMemory(&rsyncStartInfo, sizeof(STARTUPINFO));

  rsyncStartInfo.cb = sizeof(STARTUPINFO);
  rsyncStartInfo.cbReserved2 = NULL;
  rsyncStartInfo.lpDesktop = NULL;
 
  rsyncStartInfo.wShowWindow = SW_NORMAL;
      rsyncStartInfo.dwFlags = STARTF_USESHOWWINDOW;

      PROCESS_INFORMATION processInfo; 

      BOOL Ret = FALSE;
      Ret = CreateProcess("C:\\Program Files\\cwRsync\\bin\\rsync.exe",
"-vzrtopg --progress --delete testuser@192.168.0.104::test /cygdrive/g/backup",
NULL,
NULL,
FALSE,
CREATE_NEW_CONSOLE,
NULL,
NULL,
    &rsyncStartInfo,

&processInfo);

11 个解决方案

#1


命令行语句最后加个pause命令

#2


因为你的rsync.exe 已经执行完毕,所以窗口就会关闭。

#3


我以前也试过,貌似命令行程序加system("pause")也不行。

我当时是把命令行程序的结果输出到文件,最后看那文件。。

#4


cmd.exe /k + 原来的命令

#5


cmd.exe /k "C:\\Program Files\\cwRsync\\bin\\rsync.exe" -vzrtopg --progress --delete testuser@192.168.0.104::test /cygdrive/g/backup

#6


命令行程序执行完了就关闭了  自然就是一闪而过

#7


cmd.exe /k 执行完命令行不关闭
cmd.exe /c 执行完命令行马上关闭

#8


最终要看rsync.exe里是怎样处理这些参数的

#9


我知道了,谢谢大家的支持,正确代码如下:

 STARTUPINFO rsyncStartInfo;
      rsyncStartInfo.wShowWindow = SW_MAXIMIZE;
      ZeroMemory(&rsyncStartInfo, sizeof(STARTUPINFO));

  rsyncStartInfo.cb = sizeof(STARTUPINFO);
  rsyncStartInfo.cbReserved2 = NULL;
  rsyncStartInfo.lpDesktop = NULL;
 
  rsyncStartInfo.wShowWindow = SW_NORMAL;
      rsyncStartInfo.dwFlags = STARTF_USESHOWWINDOW;

      PROCESS_INFORMATION processInfo; 

      BOOL Ret = FALSE;
      SetEnvironmentVariable("RSYNC_PASSWORD", "123456");
  Ret = CreateProcess(NULL,
"C:\\Program Files\\cwRsync\\bin\\rsync.exe -vzropg --progress --delete testuser@192.168.0.104::test /cygdrive/g/backup",

NULL,
NULL,
FALSE,
CREATE_NEW_CONSOLE,
NULL,
NULL,
    &rsyncStartInfo,

&processInfo);

#10


可不可以让cmd窗口处于等待读取键盘输入状态

#11


在返回之前调用 getchar().
程序就会等待你键盘输入 回车后才退出。

#1


命令行语句最后加个pause命令

#2


因为你的rsync.exe 已经执行完毕,所以窗口就会关闭。

#3


我以前也试过,貌似命令行程序加system("pause")也不行。

我当时是把命令行程序的结果输出到文件,最后看那文件。。

#4


cmd.exe /k + 原来的命令

#5


cmd.exe /k "C:\\Program Files\\cwRsync\\bin\\rsync.exe" -vzrtopg --progress --delete testuser@192.168.0.104::test /cygdrive/g/backup

#6


命令行程序执行完了就关闭了  自然就是一闪而过

#7


cmd.exe /k 执行完命令行不关闭
cmd.exe /c 执行完命令行马上关闭

#8


最终要看rsync.exe里是怎样处理这些参数的

#9


我知道了,谢谢大家的支持,正确代码如下:

 STARTUPINFO rsyncStartInfo;
      rsyncStartInfo.wShowWindow = SW_MAXIMIZE;
      ZeroMemory(&rsyncStartInfo, sizeof(STARTUPINFO));

  rsyncStartInfo.cb = sizeof(STARTUPINFO);
  rsyncStartInfo.cbReserved2 = NULL;
  rsyncStartInfo.lpDesktop = NULL;
 
  rsyncStartInfo.wShowWindow = SW_NORMAL;
      rsyncStartInfo.dwFlags = STARTF_USESHOWWINDOW;

      PROCESS_INFORMATION processInfo; 

      BOOL Ret = FALSE;
      SetEnvironmentVariable("RSYNC_PASSWORD", "123456");
  Ret = CreateProcess(NULL,
"C:\\Program Files\\cwRsync\\bin\\rsync.exe -vzropg --progress --delete testuser@192.168.0.104::test /cygdrive/g/backup",

NULL,
NULL,
FALSE,
CREATE_NEW_CONSOLE,
NULL,
NULL,
    &rsyncStartInfo,

&processInfo);

#10


可不可以让cmd窗口处于等待读取键盘输入状态

#11


在返回之前调用 getchar().
程序就会等待你键盘输入 回车后才退出。