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/