我需要在同一目录中安装几个安装程序,因此它与 Inno Setup 卸载程序名称unins000.exe
和unins000.dat
有没有办法更改 Inno Setup 卸载程序的默认名称?
我需要在同一目录中安装几个安装程序,因此它与 Inno Setup 卸载程序名称unins000.exe
和unins000.dat
有没有办法更改 Inno Setup 卸载程序的默认名称?
不,'unins' 被硬编码在可执行文件、数据和 msg 文件的名称生成过程中,在GenerateUninstallInfoFilename
inno-setup 源的 'install.pas' 中的'过程中。
GenerateFilenames
子程序有这个:
BaseFilename := AddBackslash(BaseDir) + Format('unins%.3d', [I]);
UninstallExeFilename := BaseFilename + '.exe';
..
其中“I”是一个整数,“BaseDir”是从中派生的UninstallFilesDir
,您可以从中进行更改。
刚刚自己处理了这个。由于 Martin Prikryl 指出的原因,您不应该移动卸载程序可执行文件本身。但是我同意让一堆编号的卸载程序坐在一个目录中而没有明显的方法来分辨哪个是哪个是不令人满意的。
有一个使用 Inno Setup 提供的工具的解决方案。在该[Setup]
部分:
[Setup]
...
UninstallFilesDir=Uninstall\exe\{#NAME_OF_APP}
...
然后在[Dirs]
部分:
[Dirs]
...
Name: Uninstall\exe; Attribs: hidden;
Name: Uninstall\exe\{#NAME_OF_APP}; Attribs: hidden;
...
最后,您创建[Icons]
了指向卸载程序的命名快捷方式,这些快捷方式将始终具有相同的名称,因为您已经隔离了它们:
[Icons]
...
Name: Uninstall\{#NAME_OF_UNINSTALLER}; Filename: Uninstall\exe\{#NAME_OF_APP}\unins000.exe
...
这将操作系统中的引用仅保留给卸载程序,将令人困惑的可执行文件名称隐藏在用户通常不会看到但仍可以访问的文件夹中,并提供可以全部存在于同一文件夹中的命名、描述性快捷方式。您还可以给快捷方式一个好的图标。为了更好地衡量,也许在 \exe 目录中放置一个额外的 README 来解释发生了什么,以防万一有人多管闲事(他们自然会)。
当 Inno 检测到不同的应用程序安装到同一目录(基于不同的AppID
)时,它会自动执行此操作。应该没有必要背着它重命名卸载程序文件。
好吧,虽然仍然不可能本地更改卸载程序名称,但我将在运行部分使用批处理命令重命名卸载程序并在卸载程序注册表路径中执行相同操作:
[Run]
Filename: {cmd}; Parameters: "/C Move ""{app}\unins000.exe"" ""{app}\Uninstallers\{#ApplicationName} - uninstall.exe"""; StatusMsg: Installing {#ApplicationName}...; Flags: RunHidden WaitUntilTerminated
Filename: {cmd}; Parameters: "/C Move ""{app}\unins000.dat"" ""{app}\Uninstallers\{#ApplicationName} - uninstall.dat"""; StatusMsg: Installing {#ApplicationName}...; Flags: RunHidden WaitUntilTerminated
Filename: REG.exe; Parameters: "ADD ""HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Windows 8 ContextMenu - {#ApplicationName}_is1"" /V ""UninstallString"" /T ""REG_SZ"" /D ""\""{app}\Uninstallers\{#ApplicationName} - uninstall.exe\"""" /F"; StatusMsg: Installing {#ApplicationName}...; Flags: RunHidden WaitUntilTerminated
Filename: REG.exe; Parameters: "ADD ""HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Windows 8 ContextMenu - {#ApplicationName}_is1"" /V ""QuietUninstallString"" /T ""REG_SZ"" /D ""\""{app}\Uninstallers\{#ApplicationName} - uninstall.exe\"" /SILENT"" /F"; StatusMsg: Installing {#TipName}...; Flags: RunHidden WaitUntilTerminated
这类似于 Elektrostudios 的回答,对我有用:
Filename: {cmd}; Parameters: "/C Mkdir ""{app}\Uninstallers\{#MyAppName}"""; Flags: RunHidden WaitUntilTerminated
Filename: {cmd}; Parameters: "/C Move ""{app}\unins000.exe"" ""{app}\Uninstallers\{#MyAppName} - uninstall.exe"""; StatusMsg: Installing {#MyAppName}...; Flags: RunHidden WaitUntilTerminated
Filename: {cmd}; Parameters: "/C Move ""{app}\unins000.dat"" ""{app}\Uninstallers\{#MyAppName} - uninstall.dat"""; StatusMsg: Installing {#MyAppName}...; Flags: RunHidden WaitUntilTerminated
Filename: {cmd}; Parameters: "/C Move ""{app}\unins000.msg"" ""{app}\Uninstallers\{#MyAppName} - uninstall.msg"""; StatusMsg: Installing {#MyAppName}...; Flags: RunHidden WaitUntilTerminated
Filename: REG.exe; Parameters: "ADD ""HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Windows 8 ContextMenu - {#MyAppName}_is1"" /V ""UninstallString"" /T ""REG_SZ"" /D ""\""{app}\Uninstallers\{#MyAppName} - uninstall.exe\"""" /F"; StatusMsg: Installing {#MyAppName}...; Flags: RunHidden WaitUntilTerminated
Filename: REG.exe; Parameters: "ADD ""HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Windows 8 ContextMenu - {#MyAppName}_is1"" /V ""QuietUninstallString"" /T ""REG_SZ"" /D ""\""{app}\Uninstallers\{#MyAppName} - uninstall.exe\"" /SILENT"" /F"; StatusMsg: Installing {#MyAppName}...; Flags: RunHidden WaitUntilTerminated
使用 Windows 7,我发现“移动”命令将不起作用,除非我有某个地方可以将文件首先移动,这意味着我必须在顶部添加 mkdir 行。此外,如果不移动 .msg 文件,卸载程序将无法工作,因此我也遵循了该模式并添加了该行。
我没有费心将“Windows 8”更改为“Windows 7”,但它没有任何区别,所以我不理会它。如果有我不知道的问题,我相信有人会在评论中指出。
{#MyAppName} 当然是定义在 ISS 文件顶部的常量,用于声明应用程序的名称。您的常量的定义可能不同,因此您需要在必要时对其进行更改以匹配。
Inno Setup 不提供任何方法让您命名(或重命名)卸载程序。Inno Setup 会自行处理命名冲突。
另请注意,当您尝试手动重命名卸载程序时(就像这里的一些答案一样),您会破坏对“添加”中的卸载程序或“控制面板”中的远程应用程序的引用。
即使您修复了参考,还有另一个问题。稍后升级时,新安装程序将找不到以前安装程序的日志,也无法合并它们。因此,未来的卸载不会完全删除该应用程序。请参阅 Inno Setup 文档中的附加到现有卸载日志。