我有一个包含不同变体的项目,它们都安装在同一个位置,例如C:\ABC\
。这里的卸载程序名为unins000,unins001 ..等等。我在网上搜索了更改卸载程序名称,并且没有固有的方法来更改卸载程序名称。
我有一个解决方法,我使用[Run]
部分将unins000.exe
重命名为我选择的名称。当只有一个卸载程序时,这适用于项目文件夹。但是,在我的情况下,我不知道卸载程序名称。
有人可以建议我获取卸载程序名称的方法吗?我将相应的名字放在我的代码中。
请不要建议我查找时间戳。这不是一个可以接受的解决方案。
提前致谢。
答案 0 :(得分:1)
Inno Setup不提供任何方法让您命名(或重命名)卸载程序。
另请注意,当您手动重命名卸载程序时(就像您正在执行的操作),您将在控制面板中的添加或远程应用程序中断对对卸载程序的引用。不要那样做。
另一个问题是,当您稍后升级时,新安装程序将无法找到以前安装程序的日志,并且无法合并它们。因此,未来的卸载不会完全删除该应用程序 请参阅Inno Setup文档中的Appending to Existing Uninstall Logs。
用户不应通过转到安装文件夹并执行卸载程序来卸载应用程序。用户应该转到“控制面板”并按名称选择应用程序。
无论如何,卸载程序按顺序编号,因此您可以选择编号最大的卸载程序。
答案 1 :(得分:-1)
我添加了以下代码,用于实现我想要的。基本上,我现在正在做的是为每个变体创建一个单独的文件夹,我存储单个卸载程序(因为我无法获得卸载程序,我需要重命名)。
项目结构现在是
C:\ABC\Uninst\<Variant-2>\<variant2-uninstaller>
[Run]
添加 `[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
部分,这会将卸载程序名称更改为所需的名称。此外,HKLM中的注册表项将被修改,以便快捷方式和控制面板可以毫无问题地卸载程序。
[Setup]
在UninstallFilesDir={app}\Uninst\
部分添加以下行
unins000.exe
这将在Uninst
文件夹中创建setOnTouchListener
。
请注意我已解决了我的问题。我为任何想要做类似事情的人发布了我的代码。