unins000.exe
Inno Setup アンインストーラー名と競合するように、同じディレクトリにいくつかのインストーラーをインストールする必要があります。unins000.dat
Inno Setup アンインストーラーのデフォルト名を変更する方法はありますか?
unins000.exe
Inno Setup アンインストーラー名と競合するように、同じディレクトリにいくつかのインストーラーをインストールする必要があります。unins000.dat
Inno Setup アンインストーラーのデフォルト名を変更する方法はありますか?
いいえ。「unins」は、実行可能ファイル、データ ファイル、および msg ファイルの名前生成手順、GenerateUninstallInfoFilename
inno-setup ソースの「install.pas」の手順にハードコードされています。
GenerateFilenames
サブプロシージャには次のものがあります。
BaseFilename := AddBackslash(BaseDir) + Format('unins%.3d', [I]);
UninstallExeFilename := BaseFilename + '.exe';
..
ここで、「I」は整数で、「BaseDir」はUninstallFilesDir
変更可能な派生元です。
アンインストーラーの名前をネイティブに変更することはまだ不可能ですが、実行セクションでバッチ コマンドを使用して、アンインストーラーの名前を変更し、アンインストーラーのレジストリ パスで同じことを行います。
[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
これは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 を使用して、最初にファイルを移動する場所がないと "Move" コマンドが機能しないことを発見しました。つまり、最初に mkdir 行を追加する必要がありました。また、アンインストーラーは .msg ファイルも移動しないと機能しないため、パターンに従ってその行も追加しました。
あえて「Windows 8」を「Windows 7」に変更したのですが、特に問題はなかったのでそのままにしておきます。私が気付いていないことに問題がある場合は、誰かがコメントでそのことを示すと確信しています。
{#MyAppName} はもちろん、アプリケーションの名前を宣言する ISS ファイルの先頭で定義されている定数です。定数は別の方法で定義されている可能性があるため、必要に応じて変更する必要があります。
Inno Setup には、アンインストーラーに名前を付ける (または名前を変更する) 方法はありません。Inno Setup は、独自に名前の競合を処理します。
また、アンインストーラーの名前を手動で変更しようとすると (ここでのいくつかの回答のように)、コントロール パネルの [追加] またはリモート アプリケーションでアンインストーラーへの参照が壊れることにも注意してください。
参照を修正しても、別の問題があります。後でアップグレードすると、新しいインストーラーは以前のインストーラーのログを見つけられず、それらをマージできなくなります。したがって、将来のアンインストールでは、アプリケーションが完全に削除されるわけではありません。Inno Setup ドキュメントの既存のアンインストール ログへの追加を参照してください。