CreateProcess引起问题

时间:2019-04-12 18:00:15

标签: c winapi

由于某种原因,创建过程会打开cmd 即使未指定 然后按Enter键会在命令行中弹出更多cmd实例。

#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <direct.h>
void main()
{
    char cmd[255];
    STARTUPINFO si;
    PROCESS_INFORMATION pi;
    ZeroMemory(&si, sizeof(si));
    si.cb = sizeof(si);
    ZeroMemory(&pi, sizeof(pi));
   for(;;)
   {
     fgets(cmd,255,stdin);
    CreateProcess(cmd,NULL,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);
  }
}

1 个答案:

答案 0 :(得分:0)

首先,当插入的字符串的大小<(255-1)时,fgets将得到一个具有字符'\ n'的字符串。因此,我们将\n设置为\0

fgets(cmd, 255, stdin);
cmd[strlen(cmd) - 1] = '\0';
CreateProcess(cmd, NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);

第二,

  

要在命令行中弹出更多cmd实例。

如果您的意思是:

enter image description here

这是因为cmd进程和当前进程的输入焦点交替出现在同一控制台中,而不总是创建新实例。

如果您用CreateProcess CREATE_NEW_CONSOLE

CreateProcess(cmd, NULL, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi);

您将看到仅创建了一个新的cmd控制台。 enter image description here