2

NSISセクションは複数のアンインストーラーを作成できますか?

私のインストーラーは、アプリケーションの3つの異なるバージョンのプラグインをインストールできます。したがって、インストーラーがファイルをインストールする3つの異なるディレクトリがあります。

これらの各ディレクトリに、そのディレクトリ内のファイルのみを削除するアンインストーラファイルを追加します。

3つのアンインストールファイルのそれぞれが同じセクション領域内に作成されますが、これは無効ですか?スクリプトを取得して3つのアンインストーラーを作成するにはどうすればよいですか(可能な場合)?

次のセクションでは、最後のアンインストーラー(バージョン10アンインストーラー)を1つだけ作成します。

Section "Install Plugin Files" MainSetup

    CheckInstallVers8:
        IntCmp $installVers8  1 InstallVersion8 CheckInstallVers9 InstallVersion8
    CheckInstallVers9:
        IntCmp $installVers9  1 InstallVersion9 CheckInstallVers10 InstallVersion9
    CheckInstallVers10:
        IntCmp $installVers10 1 InstallVersion10 MainInstallation InstallVersion10  

    InstallVersion8:
        # install plugins...
        SetOutPath $VERS8DIR
        writeUninstaller "${APPNAME} Uninstall.exe"
        GoTo CheckInstallVers9
    InstallVersion9:
        SetOutPath $VERS9DIR
        writeUninstaller "${APPNAME} Uninstall.exe"
        GoTo CheckInstallVers10
    InstallVersion10:
        SetOutPath $VERS10DIR
        writeUninstaller "${APPNAME} Uninstall.exe"

SectionEnd
4

1 に答える 1

5

WriteUninstallerは何度でも呼び出すことができますが、フルパス名を使用する必要があります(writeUninstaller "$VERSxDIR\${APPNAME} Uninstall.exe"

完全なスクリプトを投稿しなかったため、ロジックの何が問題になっているのかを判断するのは困難です(LogicLib.nshを使用して、{IF}sを実行できるようにすることもできます)が、ソリューションへの道を「MessageBoxデバッグ」できるはずです。

あなたが話さなかったことが関連しているかもしれないことの1つはアンインストーラーロジックです。3つのアンインストーラーがすべてまったく同じタスクを実行する場合、これは問題ではありませんが、少なくともアンインストーラーのレジストリ登録に違いがあると思います。

これに対処するには2つの方法があります。

  • アンインストーラー(または同じディレクトリ内の.ini)の最後にデータをタグ付けします
  • File!systemを使用して、 makensis.exeを呼び出し、コンパイル時にアンインストーラーを生成します。これは、通常どおりに含めます。

サブディレクトリのプラグインに関連する可能性のある別の解決策は、アンインストーラーのコンポーネントページを使用し、3つのプラグインがすべて削除された場合にのみアンインストーラーを削除することです...

于 2012-05-15T03:32:05.033 に答える