从 Pascal 代码更改 Inno Setup 消息

Change Inno Setup messages from Pascal code

我需要专门从脚本更改 ConfirmUninstallUninstalledMost(以防万一)和 UninstalledAll 以设置条件。像这样:

if FileExists(ExpandConstant('{app}\Slash.exe')) then
  SetupMessage(msgConfirmUninstall) := FmtMessage(SetupMessage(msgConfirmUninstall), ['Dagon Slasher'])
else if FileExists(ExpandConstant('{app}\Frank.exe')) then
  SetupMessage(msgConfirmUninstall) := FmtMessage(SetupMessage(msgConfirmUninstall), ['Dagon Frankenstein'])
else
  SetupMessage(msgConfirmUninstall) := FmtMessage(SetupMessage(msgConfirmUninstall), ['Dagon Video Tools']);

但这行不通。这些消息在 MsgBoxes 中使用,所以我想不出任何其他方法。 Running in silent mode 不太适合我,因为如果程序(或其中之一)已经安装,安装程序将 运行 卸载,所以我不希望用户通过 运行设置。

您不能轻易更改这些,请参阅:


关于the silent uninstall solution:我不明白你的问题“如果程序(或其中一个)已经安装,安装程序将运行卸载”.

我假设你 运行 只有在用户确认他想要安装新版本后才安装卸载程序,所以你实际上想 运行 卸载程序默默地,对吧?

无论如何,没有什么可以阻止您 运行 从安装程序中非静默地卸载卸载程序,即使 "Add/Remove 程序中的条目" 指的是“静默”安装。


您可以使用涵盖所有设置类型的通用消息:

[Messages]
ConfirmUninstall=Are you sure you want to completely remove this game?

由于您的卸载消息取决于安装的应用程序的类型,您可以将安装程序修改为:

  • 首先创建自定义“类型”页面(如菜单)。
  • 用户选择“类型”后,使用自定义开关(例如 /APPTYPE=slasher)重新启动安装程序并退出。
  • 一旦安装程序(重新)运行 /APPTYPE,您从一开始就知道您正在安装什么 component/type,因此您可以设置 AppName相应地(使用a scripted constant)。
  • 当然,您可以跳过自定义“类型”页面。

这个其实不难实现。唯一的缺点是设置 window 在用户选择“类型”后“重新创建”。

我已经在对 的回答中概述了这个解决方案。