Inno setup 如何在Inno安装程序中获取卸载程序名称

Inno setup 如何在Inno安装程序中获取卸载程序名称,inno-setup,Inno Setup,我有一个具有不同变体的项目,它们都安装在相同的位置,例如C:\ABC\。这里的卸载程序名为unins000、unins001。。等等我已经在网上搜索以更改卸载程序名称,并且没有固有的方法来更改卸载程序名称 我有一个变通方法,通过使用[Run]部分将unins000.exe重命名为我选择的名称。当只有一个卸载程序时,这对项目文件夹非常有效。但是,在我的情况下,我不知道卸载程序的名称 有人能给我建议一种获取卸载程序名称的方法吗?我将在代码中相应地输入名称 请不要建议我找时间戳。这不是一个可接受的解决

我有一个具有不同变体的项目,它们都安装在相同的位置,例如
C:\ABC\
。这里的卸载程序名为unins000、unins001。。等等我已经在网上搜索以更改卸载程序名称,并且没有固有的方法来更改卸载程序名称

我有一个变通方法,通过使用
[Run]
部分将
unins000.exe
重命名为我选择的名称。当只有一个卸载程序时,这对项目文件夹非常有效。但是,在我的情况下,我不知道卸载程序的名称

有人能给我建议一种获取卸载程序名称的方法吗?我将在代码中相应地输入名称

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


提前谢谢

Inno安装程序不提供任何方法让您命名(或重命名)卸载程序

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

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


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



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

Inno安装程序不提供任何方法让您命名(或重命名)卸载程序

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

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


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



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

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

项目结构现在已经确定

C:\ABC\Uninst\\\
C:\ABC\Uninst\\\

添加
[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\
这将在
Uninst
文件夹中创建
unins000.exe


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

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

项目结构现在已经确定

C:\ABC\Uninst\\\
C:\ABC\Uninst\\\

添加
[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\
这将在
Uninst
文件夹中创建
unins000.exe


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

为什么首先需要重命名卸载程序?我已经解释过了。一个文件夹中有多个卸载程序。当用户只想卸载一个变体时,这会让他们感到困惑。用户不应该通过转到安装文件夹并执行卸载程序来卸载应用程序。用户应该转到“控制面板”并按其名称选择应用程序。另请参见。首先为什么需要重命名卸载程序?我已经解释过了。一个文件夹中有多个卸载程序。当用户只想卸载一个变体时,这会让他们感到困惑。用户不应该通过转到安装文件夹并执行卸载程序来卸载应用程序。用户应转到“控制面板”,按名称选择应用程序。另请参阅。我将添加用于实现重命名卸载程序的代码。使用它,从控制面板中添加或删除程序可以正常工作。我测试了它。我将添加我用来实现重命名卸载程序的代码。使用它,从控制面板中添加或删除程序可以正常工作。我对它进行了测试。不能保证卸载程序是
unins000.exe
。另外,升级后卸载时会出现问题。不要这样做。请参阅我的答案。无法保证卸载程序是
unins000.exe
。另外,升级后卸载时会出现问题。不要这样做。看看我的答案。