9

コンポーネントが 1 つだけで、リモート リポジトリ マネージャーがない製品用のシンプルなインストーラーを作成しました。

アンインストーラーを起動すると、紹介ページに 3 つのラジオ ボタンが表示されます。

  • パッケージマネージャー

  • コンポーネントの更新

  • すべてのコンポーネントを削除します

3 つ目だけが必要なので、次のドキュメントを確認しました。

http://doc-snapshot.qt-project.org/qtifw-master/noninteractive.html

ボタンを非表示にできないことがわかったので、これを install.qs ファイルに追加しました。

function Controller()
{
}

Controller.prototype.IntroductionPageCallback = function()
{
    gui.clickButton(buttons.NextButton);
}

これにより、紹介ページで [次へ] が自動的にクリックされるため、アンインストール ページに直接移動します。

Controller 関数に何を書いても何も起こりません。導入ページには 3 つのラジオ ボタンが表示されます。関数にいくつかのメッセージボックスを追加しましたが、それらは呼び出されません。

誰かがそれを解決する方法を知っていますか?

4

1 に答える 1

7

私は2つの実用的な解決策があると思います。

単一ページのアンインストーラーが必要な場合の最初の解決策:

前に開始したようなコントローラーを作成する必要があります。

function Controller() {
    if (installer.isUninstaller()) {
        installer.setDefaultPageVisible(QInstaller.Introduction, false);
        installer.setDefaultPageVisible(QInstaller.ComponentSelection, false);
        installer.setDefaultPageVisible(QInstaller.LicenseCheck, false);
    }
}

これにより、従来のインストール/アンインストール ワークフローのすべてのページが無効になります。アンインストール モードになっていることを確認してください。

2 ページのアンインストーラーが必要な場合:

function Controller()
{

}

Controller.prototype.IntroductionPageCallback = function()
{
    if (installer.isUninstaller()) {
        // Get the current wizard page
        var widget = gui.currentPageWidget(); 
        if (widget != null) {
            // Don't show buttons because we just want to uninstall the software
            widget.findChild("PackageManagerRadioButton").visible = false;
            widget.findChild("UpdaterRadioButton").visible = false;
            widget.findChild("UninstallerRadioButton").visible = false;
        }
    }
}

ボーナス

インストーラー モードでは、デフォルトで使用許諾契約に「同意する」を選択します。真剣に、誰がしませんか?

Controller.prototype.LicenseAgreementPageCallback = function()
{
    var widget = gui.currentPageWidget();
    if (widget != null) {
        widget.AcceptLicenseRadioButton.checked = true;
    }
}
于 2015-10-16T12:47:36.123 に答える