Я столкнулся со странной ошибкой при запуске программы Qt в Windows. Программа использует QProcess для порождения дочернего процесса с двумя аргументами. Программа и аргументы, передаваемые методу QProcess :: start (), имеют вид:
"batchfile.bat" "--option1=some_value" "--option2=some_other_value\with_a\path"
По какой-то причине, когда эти опции попадают в пакетный файл для обработки, знаки равенства были преобразованы в пробелы, и теперь это выглядит так:
"batchfile.bat" "--option1 some_value" "--option2 some_other_value\with_a\path"
из-за этого обработка не выполняется. Любые идеи, что может быть причиной замены знаков равенства пробелами? Я использую сборку mingw инфраструктуры QT 4.6.3, которая находится на странице загрузки Qt.
EDIT:
Вот фактический код. Я не писал это (я полный нуб Qt), но я должен попытаться заставить это работать. Это часть автоматизированной системы сборки, которая работает на двух версиях RHEL (4 и 5), OS X и Windows. И он отлично работает везде, кроме Windows.
QProcess sconsProcess;
sconsProcess.setWorkingDirectory(build.getBuildLocation());
sconsProcess.setProcessChannelMode(QProcess::MergedChannels);
qDebug()<<"Starting scons process:"<<build.getSconsLocation()<<QString("--variant=%1-%2").arg(build.getOs()).arg(build.getVariant())<<
QString("--source-release=%1").arg(build.getSettings().getSetting("sourceReleaseLocation", QStringList()<<"BUILDLOCATION"<<"VERSION",
QStringList()<<build.getBuildLocation()<<build.getBuildPackage().getVersion()).toString());
sconsProcess.start(build.getSconsLocation(), QStringList()<<QString("--variant=%1-%2").arg(build.getOs()).arg(build.getVariant())<<
QString("--source-release=%1").arg(build.getSettings().getSetting("sourceReleaseLocation", QStringList()"BUILDLOCATION"<<"VERSION",
QStringList()<<build.getBuildLocation()<<build.getBuildPackage().getVersion()).toString()));
qDebug()<<"Source release build process started";
Значения actaul, которые переводятся в Windows (бит, который выводится при первом вызове qDebug ()):
ОТЛАДКА: Запуск процесса scons: "V: \ Glast_Software \ Toaster \ tools \ Python2.5 \ Scripts \ scons-1.3.0.bat" "--variant = Windows-i386-32bit-vc71-Debug" "- -source-release = V: \ Glast_Software \ Toaster \ ReleaseManagerBuild \ Windows-i386-32bit-vc71 \ Debug \ ScienceTools \ LATEST-1-3163 \ ScienceTools-LATEST-1-3163-source.zip "
Однако внутри scons-1.3.0.bat (у меня было так, что он повторял все выполненные команды) переданные параметры выглядят так:
"- вариант Windows-i386-32bit-vc71-Debug" "- source-release V: \ Glast_Software \ Toaster \ ReleaseManagerBuild \ Windows-i386-32bit-vc71 \ Debug \ ScienceTools \ LATEST-1-3163 \ ScienceTools-LATEST-1-3163-source.zip "
с пропущенными знаками равенства.
РЕДАКТИРОВАТЬ (29.06.10) :
Я должен добавить, что эта система предназначена для запуска в небольшой пакетной ферме Windows с использованием системы очередей LSF. Сбой происходит только тогда, когда процесс выполняется как пакетное задание. Когда я запускаю эту программу из командной строки на одном из пакетных компьютеров, она отлично работает и выполняет именно то, что должна. Так что, возможно, это проблема окружающей среды.