Я пишу межплатформенную программу C++ с помощью QT, и я хочу упаковать/встроить много двоичных исполняемых файлов в рамках программы. Программа должна смочь выполнить эти двоичные файлы во времени выполнения.
Я фигурировал, мне будет нужен QResource, и использование QProcess запускаются () и ":/..." нотация, но я, кажется, не получаю выполнение процесса. Есть ли что-нибудь, что я пропускаю? Это должно работать как это? Двоичный файл должен быть установлен как исполняемый файл?
Фон: Я пишу инструмент, который использует Мерзавца, и я не хочу требовать, чтобы конечный пользователь установил Мерзавца вручную.
(Пробующий это на Mac OS X, BTW.)
Обновление:
Я использую следующий код (C++, QT на Mac OS X):
QString program = ":/git";
QStringList arguments;
arguments << "help" << "commit";
myProcess->start(program, arguments);
Исполняемый файл Мерзавца находится в пути проекта, мои resources.qrc ссылки это как так:
git
Я не получаю ошибку, но программа не выполнена. Поведение является тем же, когда я установил program
в несуществующий файл. Замена ":/git"
полным путем мерзавцу работает отлично.
Вы не можете выполнить программу непосредственно из ресурса.
Если у вас есть программа в ресурсе, и вы хотите ее выполнить, вам сначала придется прочитать ее из ресурс, запишите его в файл, сделайте файл исполняемым, затем выполните его.
Кроме того, когда вы говорите, что не получаете сообщение об ошибке, это, вероятно, означает, что вы не проверяете ошибки должным образом.
Не думаю, что ресурсы сработают. Процессы создаются операционной системой, а ресурсы обрабатываются приложением.
Одним из возможных решений может быть объединение дополнительных исполняемых файлов где-нибудь в каталоге вашего приложения и выполнение их из этого пути.
.Значит, проблема не в том, чтобы извлечь git-экзамен из ресурса, а в том, чтобы выполнить его?
Программа git'а корректно генерирует don disk, можете ли вы проверить её права?