如何在 Inno Setup 中获取卸载程序名称

问题描述 投票:0回答:2

我有一个具有不同变体的项目,它们全部安装到同一位置,例如

C:\ABC\
。这里卸载程序被命名为unins000、unins001..等等。我在网上搜索过更改卸载程序名称,但没有固有的方法可以更改卸载程序名称。

我有一个解决方法,我可以使用

[Run]
部分将
unins000.exe
重命名为我选择的名称。当只有一个卸载程序时,这对于项目文件夹非常有效。但是,就我而言,我不知道卸载程序名称。

有人可以建议我一种获取卸载程序名称的方法吗?我会将相应的名称放入我的代码中。

请不要建议我寻找时间戳。这不是一个可接受的解决方案。

提前致谢。

inno-setup uninstallation
2个回答
3
投票

Inno Setup 不提供任何方式让您命名(或重命名)卸载程序。

另请注意,当您手动重命名卸载程序时(就像您正在做的那样),您会在控制面板的添加或远程应用程序中中断对卸载程序的引用。不要这样做。

另一个问题是,当您以后升级时,新的安装程序将找不到以前的安装程序的日志,并且无法合并它们。因此,将来的卸载不会完全删除该应用程序。
请参阅 Inno Setup 文档中的附加到现有卸载日志

用户不应通过进入安装文件夹并执行卸载程序来卸载应用程序。用户应转到控制面板并按名称选择应用程序。


无论如何,卸载程序都是按顺序编号的,因此您可以选择编号最大的卸载程序。


另请参阅更改 Inno Setup 卸载程序的默认名称以避免命名冲突


-1
投票

我添加了下面的代码来实现我想要的。基本上,我现在要做的是为每个变体创建一个单独的文件夹,在其中存储单独的卸载程序(因为我无法获取需要重命名的卸载程序)。

现在的项目结构

C:\ABC\Uninst\<Variant-1>\<variant1-uninstaller>
C:\ABC\Uninst\<Variant-2>\<variant2-uninstaller>

添加

[Run]
部分,这会将卸载程序名称更改为所需的任何名称。此外,HKLM 中的注册表项将被修改,以便快捷方式和控制面板可以毫无问题地卸载程序。

 `[Run]

  ;First rename the uninstaller files, then modify in registry
  ; /C : run CMD, execute command, then close the CMD.exe
  Filename: {cmd}; Parameters: "/C ren ""{app}\Uninst\unins000.exe"" ""Uninstall_{#ApplicationName}.exe"""; Flags: RunHidden WaitUntilTerminated

 Filename: {cmd}; Parameters: "/C ren ""{app}\Uninst\unins000.dat"" ""Uninstall_{#ApplicationName}.dat"""; Flags:  RunHidden WaitUntilTerminated

 ; REG ADD [ROOT\]RegKey /v ValueName [/t DataType] [/S Separator] [/d Data] [/f]
 ; /F : Force overwrite
 Filename: REG; Parameters: "ADD ""HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{#AppNameInReg}_is1"" /V ""UninstallString"" /T ""REG_SZ"" /D ""\""{app}\Uninst\Uninstall_{#ApplicationName}.exe"""" /F"; StatusMsg: Flags: RunHidden WaitUntilTerminated

 Filename: REG; Parameters: "ADD ""HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{#AppNameInReg}_is1"" /V ""QuietUninstallString"" /T ""REG_SZ"" /D ""\""{app}\Uninst\Uninstall_{#ApplicationName}.exe /SILENT"""" /F"; Flags: RunHidden WaitUntilTerminated

[Setup]
部分添加以下行
UninstallFilesDir={app}\Uninst\
这将在
unins000.exe
文件夹中创建
Uninst

请注意,我已经解决了我的问题。我为任何想做类似事情的人发布了我的代码。

© www.soinside.com 2019 - 2024. All rights reserved.