Всем привет!
Возникла необходимость вызывать из одной программы другую, вот такой код не работает, как правильно ?
QProcess myProc;
myProc.start ("C:\1.exe");
void func()
{
QProcess myProc;
myProc.start ("C:\1.exe");
}
void func()
{
QProcess myProc;
myProc.start ("C:\1.exe");
}
QProcess *p = new QProcess(...);
p->start( ... );
void func()
{
QProcess myProc;
myProc.start ("C:\1.exe");
myProc.waitForFinished();
}
void func()
{
QProcess myProc;
myProc.start ("C:\1.exe");
myProc.waitForFinished();
}
QProcess myProc;
QStringList Arg;
Arg << "/c mybat.bat";
myProc.startDetached("cmd.exe",Arg,Catalog); //запускаю батник в нужной папке через cmd.exe
myProc.waitForFinished();
QProcess myProc;
QStringList Arg;
Arg << "/c mybat.bat";
myProc.startDetached("cmd.exe",Arg,Catalog); //запускаю батник в нужной папке через cmd.exe
myProc.waitForFinished();
BRE, AntonTatu, не цитируйте целыми сообщениями, как цитировать по чуть-чуть написано http://www.forum.crossplatform.ru/index.php?showtopic=1455
arg = QStringList() << "/c" << "console_runner.bat" << "calc.exe";
projectProcess->start("cmd.exe", arg);
%*
pause
DEADHUNT,
а почему должна оставаться?
"console_runner.bat"
закончил работу,
ключ /c -- последующее завершение сеанса.
попробуй в командной строке набрать то что в программе должно выполниться.
извиняюсь не прав .
сейчас попробовал, остается командная строка.
хм...
работа не была завершенна, в скрипте же есть pause в конце.
почему не хочешь так?
arg = QStringList() << "calc.exe";
projectProcess->start("console_runner.bat", arg);
также работает(calc запускается), но консоль не показывается. например вместо calc надо ping запустить, но консоли нет и результатов не видно.
DEADHUNT,
мож настройки винды такие.
а примерчика компилируемого нет?
примерчик очень большой(не один десяток файлов), судя по гуглу Qt так работает, сам можешь скомпилировать минимальный код который я написал выше и всё увидишь.
QProcess::start не показывает консоль
QProcess::startDetached показывает (static class member).
но надо также отлавливать завершение процесса или вручную завершить процесс, поэтому второй вариант не подходит.
смысл всего этого кода сделать что то типа загрузчика програм(в идеале как в VS Start Without Debug).
DEADHUNT,
да start запускает консоль(в процессах видно), но скрывает её,
а видно консоль только если её отделить сразу же от процесса, а если отделлить то сигнала о завершении не получить.
выход только WinAPI и условную компиляцию использовать? в линуксе отлично xterm работает.
DEADHUNT, командная строка может захлопнутся, если программа вызываемая в батнике вернёт не нуль.
П.С. сам на такое наталкивался при выборочной компиляции Qt и вот к такому выводу пришёл.
DEADHUNT,
я запустил так
QStringList s;
proc.start("bat.bat",s);
start cmd
спасибо, но всётаки интересно как же тогда VS делает терминал через AllocConsole, или тоже какойто скрипт запускает?
а может проблему с завершением программы решить так progname || 1, только тогда вывод не красивый получается.
это тебе надо к знатокам винды:)
сомневаюсь, это наверное особенность Qt.
можно у разарботчиков поинтересоваться,
отправив баг репорт.
баг это или нет не знаю но ответить они могут.
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)