почему-то процесс создания открывает cmd даже если это не указано и нажатие ввода вызывает появление дополнительных экземпляров cmd в командной строке.
#include <windows.h>
#include <stdio.h>
void main()
{
PROCESS_INFORMATION pi;
STARTUPINFO si;
char cmdline[255];
ZeroMemory(&pi, sizeof(pi));
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
loop:
fgets(cmdline,255,stdin);
CreateProcessA(NULL,cmdline,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);
goto loop;
}
Думаю, если вы отлаживаете свою программу, то понимаете, почему она ведет себя именно так. Вы отладили свою программу?
Единственный способ появления командного окна — это если ваша переменная cmd[] получает командную строку от пользователя, который вызывает консольное приложение. Если вы не хотите, чтобы окно команд отображалось для консольных приложений, у CreateProcess() есть доступный флаг CREATE_NO_WINDOW.
Строка будет содержать \n, вы этого ожидаете?





Во-первых, fgets получит строку с символом '\n', когда размер вставляемой строки <(255-1). Итак, давайте установим \n на \0:
fgets(cmd, 255, stdin);
cmd[strlen(cmd) - 1] = '\0';
CreateProcess(cmd, NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
Второй,
more instances of cmd to popup in the command line.
Если то, что вы имеете в виду, похоже на:
Это связано с тем, что фокус ввода процесса cmd и текущего процесса поочередно появляются в одной и той же консоли, не всегда создавая новый экземпляр.
Если вы CreateProcess с CREATE_NEW_CONSOLE:
CreateProcess(cmd, NULL, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi);
cmdв вашем коде, очевидно, это переменная, заполненная пользовательским вводом. Относится ли «cmd» в вашем вопросе к этой переменной или кcmd.exe?