Как запустить консольную команду на c++ бесшумно? - Вопросы по С+
  • Чаты 4chT.com в телеграмм
    Наши группы в телеграмм

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

Регистрация
5 Окт 2013
Сообщения
81
Репутация
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);
 
Регистрация
7 Июл 2013
Сообщения
87
Репутация
-2
Спасибо
0
Монет
0
Прости их Господи, ибо не ведают они, что творят...

Люди, которые используют для запуска команд (через system или что-то подобное), относительные пути, нарываются на очень большие неприятности. Особенно если дело происходит в Windows, где исполняемый файл первым делом ищется в текущем каталоге. Любой, кто имеет право записи в этот каталог, сможет выполнить произвольный код в системе от имени пользователя, запустившего программу. Допустим, можно создать прослойку, которая будет вызывать настоящий mysqldump и при этом похищать и передавать злоумышленнику переданные в виде аргументов логин и пароль от базы.
 
Регистрация
11 Апр 2013
Сообщения
84
Репутация
0
Спасибо
0
Монет
0
Че то строка большая, я думал подумывал на
тоже самое 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 % решу твой вопрос я решал его себе уже.
 
Регистрация
20 Окт 2013
Сообщения
105
Репутация
0
Спасибо
0
Монет
0
я не работал с C++/CLI, но если мне не изменяет память, на обычном Си это решалось использованием WinMain вместо main
 
Регистрация
22 Июн 2013
Сообщения
79
Репутация
0
Спасибо
0
Монет
0
под вендой запускай процесс через
ShellExecute()
или
CreateProcess()
у обоих вызовов есть флаг скрытия окна.
 
Сверху Снизу