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

Ele*_*ios 9 installer inno-setup uninstall uninstallation

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

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

Ser*_*yuz 10

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

GenerateFilenames 子程序有这个:

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

其中'I'是一个整数,'BaseDir'是从中UninstallFilesDir可以改变的.


Dea*_*nna 7

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

  • @Magnus随机浏览文件夹的人无法分辨它们的事实并不意味着Inno会自动处理此错误。如果您是开发人员想要简化它,请在开始菜单组中添加指向“ {uninstallexe}”的快捷方式,将其指向“添加/删除程序”小程序,或设置“ UninstallDir”。Inno仍然可以设计完美地处理同一文件夹中的不同应用程序。 (2认同)

小智 7

我自己处理了这个问题.由于Martin Prikryl指出,你不应该将卸载程序可执行文件本身移动.但是我同意让一堆编号的卸载程序放在一个目录中并且没有明显的方法来告诉哪个是哪个是不满意的.

使用Inno Setup提供的设施有一个解决方案.在该[Setup]部分:

[Setup]
...
UninstallFilesDir=Uninstall\exe\{#NAME_OF_APP}
...
Run Code Online (Sandbox Code Playgroud)

然后在该[Dirs]部分:

[Dirs]
...
Name: Uninstall\exe; Attribs: hidden;
Name: Uninstall\exe\{#NAME_OF_APP}; Attribs: hidden;
...
Run Code Online (Sandbox Code Playgroud)

最后,您可以创建指定的快捷方式,[Icons]这些快捷方式将始终具有相同的名称,因为您已将它们隔离在一起:

[Icons]
...
Name: Uninstall\{#NAME_OF_UNINSTALLER}; Filename: Uninstall\exe\{#NAME_OF_APP}\unins000.exe
...
Run Code Online (Sandbox Code Playgroud)

这会将操作系统中的引用留给卸载程序,将可疑的可执行文件名隐藏在用户通常不会看到但仍可访问的文件夹中,并提供可以全部存在于同一文件夹中的命名描述性快捷方式.您还可以为快捷方式提供一个好的图标.为了更好的衡量,可以在\ exe目录中删除一个额外的README来解释发生了什么,以防有人得到多管闲事(他们会自然而然).

  • 只需分配`UninstallFilesDir={app}\<Your Installer Name>` 对我来说就足够了 (2认同)

Ele*_*ios 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
Run Code Online (Sandbox Code Playgroud)


Ste*_*ton 6

这与 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
Run Code Online (Sandbox Code Playgroud)

使用 Windows 7,我发现“移动”命令不起作用,除非我有地方可以首先将文件移动到,这意味着我必须在顶部添加 mkdir 行。另外,如果不移动 .msg 文件,卸载程序将无法工作,因此我遵循该模式并添加了该行。

我没有费心将“Windows 8”更改为“Windows 7”,但这没有任何区别,所以我就不管它了。如果存在我不知道的问题,我相信有人会在评论中指出。

当然,{#MyAppName} 是在 ISS 文件顶部定义的常量,用于声明应用程序的名称。您的常量可能有不同的定义,因此您需要更改它以在必要时匹配。