Запуск приложения под Windows с помощью запуска - PullRequest
1 голос
/ 08 декабря 2008

Я заметил, что могу запустить программу с соответствующим обработчиком, написав start filename . Однако для некоторых файлов я получаю только консоль, и я не знаю почему. Я пытаюсь заполнить элемент управления списком в MFC, и я хочу, чтобы программа и связанный с ней обработчик запускались при двойном щелчке по выделению. Есть ли лучший способ или объяснение, почему это не работает?
Это код, который может быть проблемой:

<code>
int selection = listControl.GetCurSel();
CString text;
listControl.GetText(selection,text);
string std_str = StringUtils::CStringToString(text);
string st = string("start \"")+std_str+string("\"");
const char* command = st.c_str();
system(command);

Ответы [ 2 ]

5 голосов
/ 08 декабря 2008

Если первый параметр в командной строке start заключен в двойные кавычки, он использует его в качестве заголовка окна вместо команды. Это хромает, но это то, что он делает ...

Попробуйте

string st = string("start \"\" \"")+std_str+string("\"");

вместо.

Но если вы пытаетесь заставить обработчик оболочки для файла выполнить внутри вашего процесса, лучший, более чистый способ сделать это вместо вызова команды start - это использовать ShellExecute() или ShellExecuteEx() Win32 API.

1 голос
/ 08 декабря 2008

Я полагаю, что start использует обработчик файла, связанный с расширением файла.

В основном он будет использовать расширение файлов для поиска приложения, которое нужно запустить.
Похоже, расширение используемых файлов приводит к тому, что по умолчанию запускается обработчик консоли.

Вы можете начать с чтения документации MS:
http://msdn.microsoft.com/en-us/library/53ezey2s.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...