Qt installer framework не удалось загрузить удаленное дерево
Этот вопрос касается версии 2.0 Qt Installer Framework.
На данный момент для людей, использующих Qt Installer Framework, общеизвестно, что без настройки вы просто не сможете перезаписать существующую установку через ваш установщик. По-видимому, это было сделано для решения некоторых проблем, которые возникли, когда это было сделано с помощью инфраструктуры Qt.
Тем не менее, для небольших относительно простых проектов перезапись вполне удобна и намного удобнее, чем предварительное использование инструмента обслуживания вручную.
Я ищу решение, включающее пользовательский скрипт компонента UI +, который добавляет кнопку на целевую страницу каталога, которая позволяет пользователю
- Удалить указанный каталог, если он существует, или
- Запустите инструмент обслуживания в этом каталоге.
Было бы предпочтительно иметь возможность запускать инструмент обслуживания в целевом каталоге, с его автоматическим удалением определенного пакета, , но я понимаю, что это требует слишком много.
Я прочитал ответы на другие вопросы на этом сайте о решении той же проблемы, но ни одно из решений не работает правильно. Я также хотел бы отметить, что у меня запущен и работает скрипт компонента, но нет пользовательских интерфейсов.
3 ответа
Я наконец нашел подходящее решение.
Вам нужно три вещи, чтобы осуществить это:
- Компонентный скрипт,
- Пользовательский интерфейс для целевой страницы каталога и
- Скрипт контроллера, который автоматически выбирает программу удаления.
Я сейчас перечислю дословно, что работает для меня (с моим конкретным проектом). Мой компонент называется Atlas4500 Tuner
packages / Atlas4500 Tuner / meta / package.xml :
Сценарий пользовательского компонента packages / Atlas4500 Tuner / meta / installscript.qs :
Пользовательский виджет целевого каталога packages / Atlas4500 Tuner / meta / targetwidget.ui :
packages / Atlas4500 Tuner / data / scripts / auto_uninstall.qs :
Идея здесь состоит в том, чтобы определить, есть ли в текущем каталоге установка или нет, и, если это так, запустить инструмент обслуживания в этом каталоге с помощью скрипта контроллера, который просто щелкает по нему.
Обратите внимание, что я поместил скрипт контроллера в каталог скриптов, который является частью фактических данных компонента. Возможно, вы могли бы сделать что-то более чистое, если у вас есть несколько компонентов, но это то, что я использую.
Вы должны быть в состоянии скопировать эти файлы для себя и просто настроить строки, чтобы он работал.
Есть несколько вещей, которые вам нужно сделать:
Чтобы пройти мимо TargetDirectoryPage, чего вы можете достичь, добавив этот код installer.setValue («RemoveTargetDir», false)
Я взломал вокруг. Поместите его в конец вашего installscript.qs.
Это приведет к удалению maintenancetool.exe после ожидания 3 секунд, в результате чего установщик просто предупреждает, что целевая папка не пуста, а не отказывается установить. Кроме того, он удаляет запись реестра для удаления программы, чтобы он не накапливался в добавлении / удалении программ. Очевидно, что после удаления средства обслуживания вы больше не сможете его использовать для таких вещей, как удаление или обновление, но я поддерживаю это только через повторный запуск установщика. Инструмент обслуживания написан только после завершения установки, и cmd start cmd заключается в том, чтобы сделать так, чтобы установщик не заметил, что какой-то шаг еще выполняется. Если у вас есть несколько дополнительных компонентов, вам может потребоваться увеличить задержку или сделать ее более надежной, чтобы проверить, работает ли что-то еще.
В теории не должно быть необходимости писать командный файл и затем выполнять его. Вы должны быть в состоянии выполнить команду напрямую. На практике я не нашел способа правильно экранировать кавычки, чтобы заставить правильный экземпляр cmd оценивать правильные части.
Начал разбираться в online инсталляторах. Уперся в вопрос об удаленном репозитории для хранения пакетов для инсталляции У меня нет собственного хостинга и нет возможности выложить файлы на свой сервер.
Я могу воспользоваться для хранения файловым хостингом, например yandex диск?
Я разместил файлы из папки repository, созданной в ручном режиме с использованием bat файла, соблюдая структуру папок и файлов в репозитории. В файле config.xml указал на ссылку на папку , в которой лежит Updates.xml. В результате при инсталляции возникает ошибка:
Failure to fetch repositories
Что я сделал неправильно?
Заранее благодарен за ответ.
Рекомендуємо хостинг TIMEWEB
Abonnenten
Что касается яндекс диска, то не прокатит. Он создаёт ссылку, в которой не получится ходить по директориям. Нужен сайт. Домен в зоне RU стоит 90-130 рублей в год. Возьмите любой бесплатный хостинг и будет Вам счастье.
config.xml приведите, какой там путь вообще установлен.
Что касается структуры, то Updates.xml должен лежать рядом с директорией, где лежат все файлы. Например, в статье был задан следующий путь:
В итоге в папке helloinstaller находится файл Updates.xml и каталог ru.evileg.helloinstaller , в котором и лежит всё, что необходимо для установки.
В config.xml я записал то, что мне вернул яндекс диск, ссылку на папку, в которой лежит updates.xml. Вот так выглядит у меня config.xml:
>В итоге в папке helloinstaller находится файл Updates.xml и каталог ru.evileg.helloinstaller , в котором и лежит всё, что >необходимо для установки.
А ссылку в теге "Url" я должен указать на эту папку helloinstaller?
Как я и говорил, не работает из-за яндекс диска.
Инсталлятору нужно получить чистый документ Updates.xml, а не то, что отдаёт Яндекс.диск
В теге Url необходимо указать путь к каталогу, в котором будет находиться Updates.xml и папка с данными. По сути url у вас указан правильно. Но Яндекс.Диск отдаёт контент в обёртке Яндекс диска. Вам нужен сервер, который будет отдавать контенты обычным способом. Или берите бесплатный хостинг, как я сказал выше, или поднимайте локальный сервер, если охота просто проверить работу инсталлятора.
Здравствуйте. Сегодня установил себе QTCreator с официального сайта, создал новый проект QT Quick UI. Мне нужен элемент QtPositioning, данная библиотека как я понимаю устанавливается в месте с QTCreator. Я подключаю её следующим образом:
import QtPositioning 5.5
Т.е у меня получается вот такой код:
По началу показывало ошибку о том, что модуль не найден, причём если убрать его из проекта, то всё запускается.
file:///media/dmitry/Projects/test/untitled/untitled.qml:3 plugin cannot be loaded for module "QtPositioning": Невозможно загрузить библиотеку /media/dmitry/Projects/qt-creator/5.5/gcc_64/qml/QtPositioning/libdeclarative_positioning.so: (/media/dmitry/Projects/qt-creator/5.5/gcc_64/qml/QtPositioning/libdeclarative_positioning.so: undefined symbol: _Z25geoCoordinateInterpolatorRK14QGeoCoordinateS1_d)
- Вопрос задан более трёх лет назад
- 1163 просмотра
А вы уверены, что версия 5.5 вообще существует? У меня вот выше 5.3 в Qt 5.5.1 не показывает. Ну и вообще желательно ставить сборку с оффсайта, а не из репозиториев, нервы целее будут.
Вот лог теперь такой
Запускается /media/dima/Projects/QT/5.5/gcc_64/bin/qmlscene /home/dima/untitled4/untitled4.qml -qmljsdebugger=port:36094,block,services:DebugMessages,QmlDebugger,V8Debugger,QmlInspector
"QML Debugger: Invalid argument 'services:DebugMessages' detected. Ignoring the same."
"QML Debugger: Invalid argument 'QmlDebugger' detected. Ignoring the same."
"QML Debugger: Invalid argument 'V8Debugger' detected. Ignoring the same."
"QML Debugger: Invalid argument 'QmlInspector' detected. Ignoring the same."
QML Debugger: Waiting for connection on port 36094.
file:///home/dima/untitled4/untitled4.qml:5 plugin cannot be loaded for module "QtPositioning": Невозможно загрузить библиотеку /media/dima/Projects/QT/5.5/gcc_64/qml/QtPositioning/libdeclarative_positioning.so: (libQt5Positioning.so.5: невозможно открыть разделяемый объектный файл: Нет такого файла или каталога)
jadewizzard: "sudo apt-get install libqt5positioning5" могло что-нибудь сломать, нельзя его мешать с дистрибутивом из офсайта. По факту, по этому пути библиотека есть?
Яков Е: Я всё переустоновил, и обнаружил новую ошибку. К примеру если создавать проект QT Quick Application (т.е для С++) то QtPositioning подключается без проблем, а вот если создавать просто UI (QT Quick UI), то ошибка:
Отладка запущена
Запускается /opt/Qt/5.5/gcc_64/bin/qmlscene /home/dima/untitled23/untitled23.qml -qmljsdebugger=port:43590,block,services:DebugMessages,QmlDebugger,V8Debugger,QmlInspector
"QML Debugger: Invalid argument 'services:DebugMessages' detected. Ignoring the same."
"QML Debugger: Invalid argument 'QmlDebugger' detected. Ignoring the same."
"QML Debugger: Invalid argument 'V8Debugger' detected. Ignoring the same."
"QML Debugger: Invalid argument 'QmlInspector' detected. Ignoring the same."
QML Debugger: Waiting for connection on port 43590.
file:///home/dima/untitled23/untitled23.qml:3 plugin cannot be loaded for module "QtPositioning": Невозможно загрузить библиотеку /opt/Qt/5.5/gcc_64/qml/QtPositioning/libdeclarative_positioning.so: (/opt/Qt/5.5/gcc_64/qml/QtPositioning/libdeclarative_positioning.so: undefined symbol: _Z25geoCoordinateInterpolatorRK14QGeoCoordinateS1_d)
Справедливости ради стоит отметить, что Qt имеет свой, разумеется кроссплатформенный, фреймворк для создания установщиков. Он позволяет создавать как обычные, так и online инсталлеры, способные докачивать дополнительные компоненты из репозитория. Также есть возможность вставлять свои виджеты, добавлять новые действия (страницы). Вы наверняка устанавливали Qt Creator, а значит видели эту систему в работе. Однако при создании установщика приходится писать xml конфиг, работать с ключами в командной строке, в общем настройка имеет довольно высокий порог вхождения, особенно по сравнению с другими решениями. При этом я так и не нашел в документации упоминания о том, как пропустить страницу выбора компонентов. В общем получился весьма специфичный продукт, минус которого еще и в том, что такой способ установки считается родным только на Windows платформе.
Windows
Соответственно и вариантов создания установщиков для этой ОС масса, но я остановился на довольно удобном open source продукте — Inno setup. Создание инсталлера в нем не сложнее, чем собственно установка «далее-далее-готово».
После прохождения мастера создания, на выходе получаем скрипт, который можно легко поменять под следующие версии своей программы.
Linux
Исторически сложилось, что софт под Linux распространяется через репозитории, причем дистрибутив каждой программы представляет собой пакет специального вида, содержащий собственно файлы программы, информацию о зависимостях, и некоторые другие метаданные. Несмотря на все попытки стандартизации, кроме мейнстримовых .deb и .rpm существует множество других форматов, специфичных для отдельных дистрибутивов Linux. Canonical экспериментирует с форматом .click, напоминающим бандлы приложений в OS X, но на сегодня рассматривать этот вариант в числе основных пока преждевременно. Раз уж Ubuntu де-факто стандарт Линукса на десктопе, я буду описывать создание пакетов именно на этой платформе. Также следует отметить, что чаще всего дистрибутив стороннего ПО несет с собой все необходимое для функционирования, потому продвинутые возможности пакетной системы остаются незадействованными.
.tar.gz
Что общего между дистрибутивами? Конечно командная оболочка! Значит будем делать скриптовый установщик, который запустится на любой системе, вне зависимости от предполагаемого формата пакетов. Для того, чтобы система «увидела», что установлена новая программа, каждый файл должен занять положенное место. Минимальный набор состоит из: иконки, исполняемого файла, и специального конфига с расширением .desktop
Иконка: Согласно спецификации, Linux не требует преобразовывать исходники иконки в какие-либо сборки, нужно просто скопировать (при установке) файлы в поддиректории вида:
/usr/share/icons/hicolor/RxR/apps, где R — разрешение иконки
или
/usr/share/icons/hicolor/scalable/apps — если вы хотите установить векторное изображение в формате .svg
Однако это еще не все, каждая тема иконок имеет свой кэш, и если его не обновить — увидеть новую иконку не получится. Кэш автоматически обновляется при штатной установке пакетов, либо можно сделать это вручную, выполнив команду:
содержит всю информацию о программе — название и описание приложения, его категория, название иконки и т.д.
Узнать больше можно прочитав стандарт.
Правилом хорошего тона при установке сторонних программ с нестандартным способом установки будет хранение всех своих файлов в подкаталоге /opt/myapp , куда в том числе следует положить и деинсталлер.
Итак, в итоге у меня получился следующий скрипт, который полагает, что рядом с ним лежит бинарник, файл .desktop, скрипт на удаление, папка с иконками(в ней подкаталоги по размерам):
Несмотря на пугающе-монструозные спецификации формата, для создания простейшего пакета требуется всего один конфигурационный файл — control. Но для начала нам нужно провести некоторые приготовления:
a) Создать папку проекта, с указанием версии программы и пакета, например myapp-1.1-1
b) В нее добавить папку DEBIAN (регистр важен!), в которой будут находиться все служебные файлы, в частности control
Тут все очевидно, нужно только заметить, что полное описание начинается с пробела
c) Создать структуру каталогов, повторяющую положение файлов установленной программы в файловой системе, нечто вроде
Для того, чтобы создавать пакеты не поднимая привилегии до суперпользователя, стоит воспользоваться утилитой fakeroot, эмулирующей соответствующее окружение.
Ну и собираем пакет командой:
Если вам требуются дополнительные возможности, тут можно почитать подробный обзор.
Как говорится, есть два способа — простой и правильный.
Простой: если .deb пакет не содержит зависимостей и скриптов, то можно просто сконвертировать его, в результате наверняка получится корректно работающий пакет формата .rpm. Для этого предназначена утилита alien, которую можно установить из репозитория.
Подробнее о сборке пакетов можно почитать тут.
Как было указано выше, есть два основных метода распространения — образ диска с программой, или загрузка из каталога. Оба метода уже неплохо разобраны, стоит отметить лишь несколько принципиальных моментов.
Мне нужно запустить файл bat после завершения установки, который подключается к службе postgres Windows, поэтому в моей базе данных есть активный сервер (я использую статические postgres). Файл bat.
Мне удалось успешно создать "AdminProgram", который используется для сборки установщика для моего основного проекта. Он правильно создает необходимые конфигурации/пакеты в файловой системе, обновля.
У меня есть приложение Qt, которое мне нужно установить на компьютере клиентов, и я не могу предположить, что на нем установлен Qt. Я нахожусь на Mac OSX, и компьютер я буду устанавливать его на ка.
Я хотел бы изменить поток моего установщика QtIFW (3.0) с помощью функции контроллера, это кажется тривиальным, но я не могу найти хороший пример того, где должна находиться функция/сценарий, и как.
Мне нужно отключить стандартную следующую кнопку, на моей пользовательской странице через файл installscript.qs. Я могу отключить свою собственную кнопку (которую я создал в файле.ui) с помощью скр.
У меня проблема с Qt Installer Framework. Я создал установщик с Qt Installer Framework. Я повторно использовал "примеры/учебники" из Qt 5.0.3. Я добавил все свои файлы (exe, dll, data. ) в катало.
Я сгенерировал установщик с установщиком Qt Framework, и я хотел бы знать, как запустить мой установщик в бесшумном режиме? Я пробовал эту команду: "myinstaller.exe -platform минимальный", как эта .
Я создал некоторый установщик приложения для mac с помощью рамки установки Qt. Приложение установлено отлично, но я хочу добавить ярлык на рабочем столе (псевдоним) для своего приложения. Существуе.
Я начал работать с Framework Qt Installer Framework и нашел его полезным, за исключением многочисленных недокументированных функций (например, установки подтипа мастера или наличия переменной Deskt.
У меня установлена Qt Installer Framework QtIFW2.0.1, и я просмотрел приведенные примеры. Когда я более подробно рассмотрел примеры переводов, я узнал, как я могу перевести содержимое пользовательс.
Я использую Qt Installer Framework (2.0.3) для создания программы установки моей программой. Все работает отлично, и моя программа устанавливается отлично. Однако я хотел бы удалить (или вообще не .
Я хочу создать установщик для моего приложения. Итак, я прочитал о Qt Installer Framework, и я проверил пример учебника и создаю установщик, и все, что можно найти, найдет в этом примере. Но у меня.
Я хотел бы перевести мой мастер установки (основанный на Qt Installer Framework) на английском или французском языке (зависит от языка ОС). Я добавил эти строки в файл "installscript.qs": Component.
Я запускаю файл Docker, который выполняет неинтерактивную установку. Установка завершается с ошибкой DISPLAY. Я могу подтвердить, что неинтерактивная установка работает на виртуальной машине Ubuntu.
Я создаю Qt Installer для некоторого приложения QT. Когда я просмотрел Qt Installer Framework Manual в некоторая точка Я нашел rum binarycreator , пожал
Есть ли script или пример рамки установки Qt для "Un-installer"? Я хочу удалить некоторые папки с помощью инструмента обслуживания.
Используя Qt 5.9, я заказал программу для работы с электронными таблицами, а затем создал для нее установщик с помощью Qt Installer Framework (QtIFW2.0.1). Затем я отправил программу многим моим др.
Я использую фреймворк qt для создания установщика. На этапе установки я вызвал component.addOperation("Mkdir", dataDir);//dataDir is a dataLocationDir like C:\Users\Stranger\AppData\Local\MyAppName.
Я знаю, что любые данные, помещенные в каталог/компонент dir/data, будут скопированы в каталог установки. Я имею в виду, если у меня есть двоичный файл readme, license.txt внутри dir/data/myapp пак.
В Qt Installer Framework на всех демонстрационных версиях есть спецификация TargetDir которая (для Windows) помещает приложение в, например, C:\InstallationDirectory . Как я могу по умолчанию испол.
Мы используем Qt Installer Framework для создания наших установщиков продуктов. Большинство вещей работает довольно гладко, но есть еще некоторые нерешенные проблемы. Каждый раз, когда мы создаем н.
с установкой установщика я хотел бы создать установщик для моего приложения. Приложение устанавливается администратором на ПК. Затем приложение используется разными пользователями. В установщике я .
Я создаю приложение с использованием qt installer framework. Теперь удаление моего приложения не удаляет папку AppData/Roaming/My app. Поэтому я попробовал свой собственный код для удаления, чтобы .
Мне удалось создать установку для моего программного обеспечения. Однако я не могу понять, как создать еще один установщик, который мог бы обновить предыдущую установку. У меня есть обновленные вер.
Я пытаюсь сделать установщик в Linux с Qt Installer Framework, и я бы хотел установить фиксированный целевой каталог и удалить эту страницу из установщика. Мне удалось сделать это со скриптом и с п.
Я пишу сценарий Qt Installer Framework, и я хотел бы позволить пользователю запускать установщик с аргументами, а затем применять эти аргументы различными способами. Например, переключатель для авт.
Я создал простой установщик для нашего продукта только с одним компонентом и без менеджера удаленных репозиториев. Когда я запускаю деинсталлятор, на странице введения отображаются 3 переключателя.
У меня есть исполняемый файл C:\CDM21226_Setup.exe, который я хочу запустить через Qt Installer Framework (QtIFW). Обратите внимание, что CDM21226_Setup.exe - это драйверы, а не приложение, которое.
Я создал пакет установщика на основе фреймворка Qt с несколькими компонентами. Мне нужно было установить каждый компонент в соответствующий каталог. Можно ли указать целевой каталог для отдельного .
Вот программа. В Интернете я нашел: QSettings reg("HKEY_LOCAL_MACHINE\\SOFTWARE\\Classes\\.sp\\DefaultIcon", QSettings::NativeFormat); reg.setValue("Default", "C:\\Users\\Tomy\\Desktop\\package_dir.
У меня есть страница с проверкой серийного номера ( SerialCodePage ). Он реализован и добавлен в код установщика после IntroductionPage . Эта страница необходима для версии Pro, а для Lite я хотел .
Я хотел бы определить, была ли установлена java на машине, и если да, то какая версия JRE. У меня есть простой сценарий.bat файла, который запускает и запрашивает реестр. Это работает нормально, ко.
Я хочу добавить новую страницу непосредственно перед страницей введения мастера установки QT. На этой странице будет изображение и кнопка. После нажатия кнопки я перейду на страницу введения. Могу .
После установки моей программы мне нужно установить установщик, чтобы добавить путь к системной переменной Windows PATH. Как это сделать? Установщик должен сделать это не я. UPD: И путь программы т.
Есть ли способ вызвать команду windows cmd при удалении процесса (keepancetool.exe) из программы установки Qt? Я попытался подключить сигнал installer.uninstallationFinished, но безрезультатно! Спа.
Рубрики
А так же делитесь знаниями, знакомьтесь с новыми утилитами и приложениями, учитесь у всегда готовых помочь ответить на самые сложные вопросы во всех сферах IT и программирования. Станьте гуру и экспертом разработки ПО, получите признание коллег, заработайте репутацию, создайте стартап или приложение которое будет работать на вас!
Читайте также: