Передача параметров в cmd и запуск из нее

Рейтинг: 1Ответов: 3Опубликовано: 12.05.2011

Попытаюсь объяснить свою проблему. У меня есть приложение-интерфейс, в ней мы задаем настройки. Еще есть главное приложение, которое необходимо запустить с теми настройками.
Если я все правильно представляю, надо в приложении-интерфейс на нажатие кнопки "ПУСК" установить событие - передать эти настройки в качестве параметров через командную строку в главное приложение. Если ЭТО возможно, то как это можно реализовать? Или может есть другой путь?

Ответы

▲ 1Принят

На мой взгляд, лучше сделать так.

У вас есть программа-запускатель (launcher), которая должна запустить главню программу. В launcher Вы, например, позволяете пользователю указать настройки запуска главной программы (например, разрешение экрана, размер окна и т.д.). Затем launcher сохраняет все настройки в ФАЙЛ и запускает главную программу. Главная программа при запуске считывает все настройки, записанные launcher-ом, из этого и файла.

Если Вы хотите использовать именно командную строку, то вам просто необходимо в launcher запустить главную программу с параметрами, т.е. указать их после имени, например так:

main_program.exe "1024x768" "100x300"

А в главной программе для чтения параметров запуска необходимо обратиться к аргументу args (по-моему он так называется) - массив, содержащий "1024x768" и "100x300", процедуры main - главной процедуры (точки входа).

▲ 4

Вызовом system() из стандартной библиотеки C.

char cmd[1024]; // ну, для примера, строка такой длины

// сформируем строку, как если бы набирали в консоли (с полученными из диалога аргументами)
sprintf (cmd,"my_main_prog.exe %s %s %s",arg1,arg2,arg3); 
int exit_status = system(cmd);  // выполним команду (см. man 3 system)
// обработаем код возврата.

При формировании строки для system() надо учитывать, что некоторые символы для интерпретатора cmd (в Windows, для Unix см. sh) имеют специальное значение. Для Unix см. man sh, для Windows полезны help cmd и help start.

▲ 1

В своих программах я использовал вот такую функцию:

int CreateWaitChildProcess(wchar__t *cmd, wchar__t *cmdline) 
{ 
PROCESS__INFORMATION pi;

// Set up members of the PROCESS__INFORMATION structure. 
ZeroMemory( &pi, sizeof(PROCESS__INFORMATION) );

DWORD ec;

// Create the child process. 
if(!CreateProcess(cmd, cmdline, NULL, NULL, FALSE, 0, NULL, NULL, NULL, &pi))
{
    ec = GetLastError();
    return -1;
}

WaitForSingleObject(pi.hProcess, INFINITE);

if(GetExitCodeProcess(pi.hProcess, &ec))
    return ec;

return -2;
}
  • создает дочерний процесс (путь к исполняемому файлу задается аргументом cmd) передавая ему аргументы строки cmdline в командной строке, ожидает завершения дочернего процесса. Если ждать завершения не нужно - можно просто убрать вызов WaitForSingleObject(), но в этом случае останется неизвестным и код завершения дочернего процесса, то есть нужно убрать и вызов GetExitCodeProcess(). Если есть еще вопросы - задавайте.