2

NSIS 部分可以创建超过 1 个卸载程序吗?

我的安装程序可以为 3 个不同版本的应用程序安装插件 - 因此安装程序将在 3 个不同的目录中安装文件。

在每个目录中,我想添加一个卸载程序文件,该文件将仅删除该目录中的文件。

3 个卸载文件中的每一个都在同一个 Section 区域中创建,这是否无效?如何让我的脚本创建 3 个卸载程序(如果可能)?

以下部分仅创建一个卸载程序,最后一个(版本 10 卸载程序):

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}),但您应该能够“调试”您的解决方案。

您没有谈论的可能相关的一件事是卸载程序逻辑。如果 3 个卸载程序都执行完全相同的任务,那么这不是问题,但我预计卸载程序注册表注册至少会有所不同。

有两种方法可以解决这个问题:

  • 将数据标记到卸载程序的末尾(或同一目录中的 .ini)
  • 使用 !system 调用 makesis.exe 并在编译时生成卸载程序,您可以将其包含为正常Files

可能与子目录中的插件相关的另一种解决方案是在卸载程序中使用组件页面,并且仅在删除所有 3 个插件后才删除卸载程序...

于 2012-05-15T03:32:05.033 回答