更改Inno-Setup卸载程序的默认名称以避免命名冲突

时间:2013-09-04 23:40:05

标签: installer inno-setup uninstall uninstaller

我需要在同一目录中安装几个安装程序,因此它与inno安装卸载程序名称unins000.exeunins000.dat

冲突

有没有办法更改Inno-Setup卸载程序的默认名称?

6 个答案:

答案 0 :(得分:10)

没有。 'unins'在可执行文件源的'install.pas'中的GenerateUninstallInfoFilename'过程中,在可执行文件,数据和msg文件的名称生成过程中进行了硬编码。

GenerateFilenames子程序有:

BaseFilename := AddBackslash(BaseDir) + Format('unins%.3d', [I]);
UninstallExeFilename := BaseFilename + '.exe';
..

其中'I'是一个整数,'BaseDir'派生自UninstallFilesDir,您可以更改。

答案 1 :(得分:7)

Inno在检测到安装到同一目录中的不同应用程序时(基于不同的AppID)自动执行此操作。应该没有必要在其后面重新命名卸载程序文件。

答案 2 :(得分:7)

我自己处理过这个问题。由于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目录中删除一个额外的自述文件,以解释发生了什么,以防有人得到八卦(他们会自然而然)。

答案 3 :(得分:6)

好吧,虽然它仍然不可能原生地更改卸载程序名称,但我将在运行部分使用批处理命令重命名卸载程序并在卸载程序注册表路径中执行相同的操作:

[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

答案 4 :(得分:4)

这与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文件顶部定义的常量,用于声明应用程序的名称。您的常量可能会有不同的定义,因此您需要将其更改为必要时匹配。

答案 5 :(得分:0)

Inno Setup不提供任何方法让您命名(或重命名)卸载程序。 Inno Setup会自行处理命名冲突。

另请注意,当您尝试手动重命名卸载程序时(如此处的某些答案),您可以在“控制面板”中的添加或远程应用程序中断对对卸载程序的引用。

即使您修改了引用,也存在另一个问题。稍后升级时,新安装程序将无法找到以前安装程序的日志,并且无法合并它们。因此,未来的卸载不会完全删除该应用程序。请参阅Inno Setup文档中的Appending to Existing Uninstall Logs