installation - 在 NSIS 部分中创建超过 1 个卸载程序

标签 installation nsis

NSIS 部分可以创建多个卸载程序吗?

我的安装程序可以为应用程序的 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

最佳答案

您可以根据需要多次调用 WriteUninstaller,但应使用完整路径名 (writeUninstaller "$VERSxDIR\${APPNAME} Uninstall.exe")

您没有发布完整的脚本,因此很难判断逻辑出了什么问题(您可能想使用 LogicLib.nsh,以便可以执行 {IF}),但您应该能够通过“MessageBox 调试”找到解决方案。

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

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

  • 将数据标记到 end of the uninstaller (或同一目录中的.ini)
  • 使用 !system 调用 makensis.exe 并在编译时生成卸载程序,并将其作为正常的文件包含

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

关于installation - 在 NSIS 部分中创建超过 1 个卸载程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10593657/

相关文章:

linux - Phantomjs - 没有这样的文件或目录(我错过了什么)

server - Python pip 在安装库时引发 NewConnectionError

python - 如何使用 Python 编写 Windows SDK 安装程序?

visual-studio-2015 - 如何为Windows 10 HWA bundle 创建安装程序?

installation - NSIS 脚本是用什么语言编写的?

c# - 为 C# 应用程序制作一个安装程序,并将 .NET Framework 安装程序包含到安装程序中

linux - SAP Netweaver 7.51 安装失败(NPL 安装失败...)

unicode - 如何在 NSIS 自定义页面中编写波斯语?

windows-installer - 在 CMake + CPack + NSIS 中创建 Windows 桌面图标

c#-4.0 - SetUp 或 TearDown 方法的签名无效 - 我做错了什么?