grig_p
April 28, 2017, 5:38 p.m.

Qt Installer Framework. Вызов программы при деинсталляции.

Здравствуйте!
Возник вопрос. Если мне надо запустить какую-то команду после установки компонента я делаю так:

Component.prototype.createOperations = function()
{
    component.createOperations();

    component.addElevatedOperation("Execute", "@TargetDir@/MyProgram.exe");
А если мне надо программу запустить перед деинсталляцией пакета, где я должен вызвать?
Тут:
https://doc.qt.io/qtinstallerframework/scripting.html
приведены четыре метода Component.propotype, но о деинсталляции ничего.
Есть функции installer.isInstaller() и installer.isUninstaller(). Они работают в createOperations, но при
деинсталляции он, похоже не вызывается.
Вопрос. Где нужно вызывать свою программу при деинсталляции?
Заранее очень благодарен за ответ.

Do you like it? Share on social networks!

3
Evgenii Legotckoi
  • April 28, 2017, 6:05 p.m.

Думаю, что можно навешать дополнительные обработчики и действия на Controller.prototype.IntroductionPageCallback(). В данном обработчике, если было выбрано удаление компонентов, то выполнить некоторые операции.

Вот кстати код, который должен реагировать на смену значений радиобатонов.

function Controller()
{
    var widget = gui.pageById(QInstaller.Introduction); // get the introduction wizard page
    if (widget != null)
        widget.packageManagerCoreTypeChanged.connect(onPackageManagerCoreTypeChanged);
}

onPackageManagerCoreTypeChanged = function()
{
    console.log("Is Updater: " + installer.isUpdater());
    console.log("Is Uninstaller: " + installer.isUninstaller());
    console.log("Is Package Manager: " + installer.isPackageManager());
}

Ну и на саму страничку можно навешать обработчик.

Controller.prototype.IntroductionPageCallback = function()
{
    if (installer.isUninstaller()) {

    }
}

Кстати, вполне возможно, что PerformInstallationPageCallback также применяется и для деинсталятора, можете и его проверить. Мы на него навешивали и обычный инсталлятор и апдейтер

    grig_p
    • April 28, 2017, 7:54 p.m.
    • The answer was marked as a solution.

    Спасибо.
    Все оказалось не просто, а очень просто.
    Из справки:

    In addition, a special argument, UNDOEXECUTE, separates the DO step of the operation from the UNDO step.
    Example: component.addOperation("Execute", "touch", "test.txt", "UNDOEXECUTE", "rm", "test.txt")
    Я сделал так:
    component.addElevatedOperation("Execute", "@TargetDir@/InstallPrg.exe", "UNDOEXECUTE", "@TargetDir@/UnInstallPrg.exe");
      Evgenii Legotckoi
      • April 28, 2017, 8:02 p.m.

      А. Вон оно как. Ну хорошо, что оказалось так просто.

        Comments

        Only authorized users can post comments.
        Please, Log in or Sign up
        • Last comments
        • AK
          April 1, 2025, 11:41 a.m.
          Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
        • Evgenii Legotckoi
          March 9, 2025, 9:02 p.m.
          К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
        • VP
          March 9, 2025, 4:14 p.m.
          Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
        • ИМ
          Nov. 22, 2024, 9:51 p.m.
          Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
        • Evgenii Legotckoi
          Oct. 31, 2024, 11:37 p.m.
          Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup