Вопрос Как запустить консольную команду на c++ бесшумно?

Регистрация
5 Окт 2013
Сообщения
79
Репутация
0
Спасибо
0
Монет
0
Я пишу программу на языке C++/CLI, то есть с графическим интерфейсом. Но у меня есть в коде команда, которая выполняется через cmd, и из-за этого на 1 секунду консоль появляется поверх основного графического интерфейса. Всё работает, но хочется, чтобы консоль не показывалось. Можно ли как то запускать консоль бесшумно, чтобы команда отрабатывала, но сама консоль не появлялась? String^ username = textBox1->Text;

std::string usernameStr = ConvertToString(username);

std::string command = "mysqldump -u " + usernameStr + " -pUser -R -E test > C:\\Users\\TEST\\Desktop\\test.sql";

const char* cmd = command.c_str();

system(cmd);
 
Прости их Господи, ибо не ведают они, что творят...

Люди, которые используют для запуска команд (через system или что-то подобное), относительные пути, нарываются на очень большие неприятности. Особенно если дело происходит в Windows, где исполняемый файл первым делом ищется в текущем каталоге. Любой, кто имеет право записи в этот каталог, сможет выполнить произвольный код в системе от имени пользователя, запустившего программу. Допустим, можно создать прослойку, которая будет вызывать настоящий mysqldump и при этом похищать и передавать злоумышленнику переданные в виде аргументов логин и пароль от базы.
 
Че то строка большая, я думал подумывал на
тоже самое ShellExecute()
или
CreateProcess()
Возможно и оттуда же через ShellExecute
ShellExecute(cmd /c "код выполнения")

ShellExecute(cmd /c ""mysqldump -u " + usernameStr + " -pUser -R -E test > C:\\Users\\TEST\\Desktop\\test.sql")
Но выполнится ли большой вопрос так как строка большая и с пробелами и тд, если ее в 1 строку не закрутить и отправить тот же самый команд.
newcmd = cmd /c + /" + command + /";
ShellExecute(command)
Точнее отправить как cmd /c
cmd /C Выполнение указанной команды (строки) с последующим завершением.

Если нет то записать эту команду в bat и запускать бат в скрытом режиме командой ShellExecute.
ShellExecute(start file.bat,0) или show_hide.
Короче оставишь свой телеграм 100 % решу твой вопрос я решал его себе уже.
 
я не работал с C++/CLI, но если мне не изменяет память, на обычном Си это решалось использованием WinMain вместо main
 
под вендой запускай процесс через
ShellExecute()
или
CreateProcess()
у обоих вызовов есть флаг скрытия окна.
 
Назад
Сверху