2 / 2 / 0
Регистрация: 06.12.2012
Сообщений: 7
1

Запуск программы через C++ и консоль

11.01.2013, 17:47. Показов 12990. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток. Столкнулся с проблемой, что если запускать программу через функцию system, а в пути к программе есть пробелы, то консоль ругается, мол "C:\ Program" не является внутренней или внешней......

вот пример кода:
C++
1
2
3
4
5
6
7
8
int main(int argc, char* argv[])
{
   string cmd;
   cmd = "C:\\Program Files\\PDFCreator\\PDFCreator.exe /NoStart /IF\"D:\\work\\1101130203.ps\" /OF\"D:\\work\\1101130203.pdf\"";
   system(cmd.c_str());
   system("pause");
        return 0;
}
кто что может посоветовать?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.01.2013, 17:47
Ответы с готовыми решениями:

Запуск программы через консоль
Программа архиватор не запускается через консоль, не могу разобраться /* lzw.c based on Mark R....

Запуск программы через консоль
Что нужно сделать, чтобы программу запускать не через обычные input.txt и output.txt а через...

Запуск через консоль
Объясните пожалуйста как запустить программу через консоль? Для NetBeans IDE 7.2.1

Запуск с параметром или через консоль
Есть скомпилированная программа которая собирает данные после нажатия кнопки запуска. Вопрос в...

12
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
11.01.2013, 17:52 2
Обернуть всю команду в кавычки...
0
2 / 2 / 0
Регистрация: 06.12.2012
Сообщений: 7
11.01.2013, 17:55  [ТС] 3
Цитата Сообщение от 0x10 Посмотреть сообщение
Обернуть всю команду в кавычки...
не сработало, тоже самое выводит.
0
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
11.01.2013, 18:09 4
C++
1
"\"C:\\Program Files\\PDFCreator\\PDFCreator.exe\" /NoStart /IF\"D:\\work\\1101130203.ps\" /OF\"D:\\work\\1101130203.pdf\"";
1
425 / 390 / 113
Регистрация: 21.09.2012
Сообщений: 913
11.01.2013, 18:19 5
Toshkarik, Не могли бы объяснить, а то непонятно. Ведь строка и так уже в кавычках. Зачем еще одни нужны?
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
11.01.2013, 18:23 6
Иначе будет читать до первого пробела...
1
250 / 232 / 46
Регистрация: 05.02.2010
Сообщений: 3,288
11.01.2013, 18:31 7
Попробуй
C++
1
"\"start " + cmd.c_str() + "\"";
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
11.01.2013, 18:33 8
Используй ShellExecute() или CreateProcess()
2
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
11.01.2013, 18:44 9
Все дело в самом интерпретаторе команд Windows. Путь, содержащий пробелы, нужно брать в кавычки, иначе считается, что после первого пробела идут параметры для запуска программы.
1
2 / 2 / 0
Регистрация: 06.12.2012
Сообщений: 7
14.01.2013, 11:06  [ТС] 10
Цитата Сообщение от Toshkarik Посмотреть сообщение
C++
1
"\"C:\\Program Files\\PDFCreator\\PDFCreator.exe\" /NoStart /IF\"D:\\work\\1101130203.ps\" /OF\"D:\\work\\1101130203.pdf\"";
не сработало(

Цитата Сообщение от m1Rr0r Посмотреть сообщение
C++
1
"\"start " + cmd.c_str() + "\"";
если так, как вы написали - "Windows не удалось найти 'c:\Program'. Проверьте, что имя....."
если так:
C++
1
"start \"" + cmd.c_str() + "\"";
открывается чистая командная строка, смотрящая в директорию, из которой была запущена моя программа. сам же pdf creator не отрабатывает.

сейчас почитаю про
Цитата Сообщение от Avazart Посмотреть сообщение
ShellExecute() или CreateProcess()
.

если что, у меня cmd Windows XP [Версия 5.1.2600]
0
425 / 390 / 113
Регистрация: 21.09.2012
Сообщений: 913
14.01.2013, 11:24 11
Цитата Сообщение от tokutei Посмотреть сообщение
не сработало(
У меня сработало. Правда я не string использовал а char *
C++
1
2
3
char *str = "\"C:\\Program Files\\1.djvu\"";
 
system(str);
0
2 / 2 / 0
Регистрация: 06.12.2012
Сообщений: 7
14.01.2013, 11:49  [ТС] 12
Цитата Сообщение от v.a.l.i.d Посмотреть сообщение
У меня сработало. Правда я не string использовал а char *
C++
1
2
3
char *str = "\"C:\\Program Files\\1.djvu\"";
 
system(str);
я напишу так: вот такой код у меня хорошо отрабатывает
C++
1
2
cmd = "\"C:\\Program Files\\PDFCreator\\PDFCreator.exe\"";
system(cmd.c_str());
а вот такой уже нет:
C++
1
2
cmd = "\"C:\\Program Files\\PDFCreator\\PDFCreator.exe\" /NoStart /IF\"D:\\work\\1101130203.ps\" /OF\"D:\\work\\1101130203.pdf\"";
system(cmd.c_str());
вся проблема заключается в параметрах. можно конечно запускать через такой батничек
C++
1
2
3
cd C:\Program Files\PDFCreator
PDFCreator.exe /NoStart /IF"%1" /OF"%2" 
exit
но это уже извращение..

Добавлено через 7 минут
у меня паника, вот такой код через bat отлично проходит (вставляю в тег с++ для читабельности)
C++
1
2
"C:\Program Files\PDFCreator\PDFCreator.exe" /NoStart /IF"D:\work\1101130203.ps" /OF"D:\work\1101130203.pdf" 
exit
а через сам c++ никак( все таки иду копать в пользу CreateProcess
0
2 / 2 / 0
Регистрация: 06.12.2012
Сообщений: 7
14.01.2013, 12:44  [ТС] 13
Решил проблему так:
C++
1
2
3
string cmd = "/NoStart /IF\"D:\\work\\1101130203.ps\" /OF\"D:\\work\\1101130203.pdf\"";
ShellExecute(NULL, "open", "C:\\Program Files\\PDFCreator\\PDFCreator.exe", cmd.c_str(), NULL, SW_SHOWNORMAL);
system("pause");
2
14.01.2013, 12:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.01.2013, 12:44
Помогаю со студенческими работами здесь

Запуск Rasdial через консоль. Неприятные ньюансы
В поисках простейшего решения для автоматического создание Интернет-подключения, все рано или...

Запуск SQL запросов с разными параметрами через консоль DB2
Добрый день. Сильными знаниями по автоматизации не обладаю. Простые батники это ладно, но тут...

Консоль и Qt. Возможность работать как через консоль так и через графический интерфейс
Может кто-то знает... Как в одном и том же приложении совместить возможность запуска и через...

Запуск программы через раз
Всем привет, сделал приложение Windows Form на с#. При запуске программа должна автоматически...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru