インストールが完了したら、いくつかのファイルを削除する必要があります。
[RUN]セクションを使用してCMDを呼び出してファイルを削除していましたが、バッチではなくInnoSetupコードを使用して削除を改善したかったので、[InstallDelete]セクションを確認しましたが、[RUN]セクションの前にファイルを削除しますだから... [RUN]セクションの後にファイルを削除するために私ができることがありますか?
これが私のスクリプトです:
#define InstallerName "VirtualBox-4.2.16-r86992-MultiArch_AMD64.msi"
#define ExtensionName "Oracle_VM_VirtualBox_Extension_Pack-4.2.16-86992.vbox-extpack"
[Setup]
AppName=VirtualBox
blah blah blah...
blah blah blah...
[Files]
Source: {tmp}\*; DestDir: {tmp}; Flags: deleteafterinstall recursesubdirs createallsubdirs ignoreversion
[Run]
Filename: {tmp}\{#InstallerName}; Parameters: "/passive /norestart ADDLOCAL=VBoxApplication INSTALLDIR=""{app}"""; StatusMsg: Instalando VirtualBox...; Flags: shellexec RunHidden WaitUntilTerminated
Filename: {tmp}\xml.exe; Parameters: "ed --inplace -N N=""http://www.innotek.de/VirtualBox-settings"" --update ""//N:ExtraDataItem[@name='GUI/UpdateDate']/@value"" --value never ""{%userprofile}\.virtualbox\virtualbox.xml"""; StatusMsg: Instalando VirtualBox...; Flags: RunHidden WaitUntilTerminated
Filename: {app}\VBoxManage.exe; Parameters: "extpack install --replace ""{tmp}\{#ExtensionName}"""; StatusMsg: Instalando Extension Pack...; Flags: RunHidden WaitUntilTerminated
Filename: {app}\virtualbox.exe; Description: {cm:LaunchProgram,VirtualBox}; Flags: shellexec postinstall unchecked skipifsilent nowait
[InstallDelete]
Name: {commondesktop}\Oracle VM VirtualBox.lnk; Type: files
Name: {commonstartmenu}\Programs\Oracle VM VirtualBox; Type: filesandordirs
一時ファイルを削除しようとしている場合(サブインストールに必要な場合など):
{tmp}
にインストールしたものはすべて、インストールの終了時に自動的に削除されます。
何らかの理由で{tmp}
にインストールできない場合は、[Files]
エントリでdeleteafterinstall
フラグを使用できます。
そのサブインストールによって作成されたファイルを削除しようとしている場合は、ベンダーに連絡するか、ベンダーのドキュメントを確認して、最初にそのアイテムのインストールを抑制するために渡すことができるコマンドラインパラメーターがあるかどうかを確認する必要があります。通常、デスクトップアイコンのようなオプションのものがあるはずです。
CurStepChanged
イベントハンドラーのインストール後の手順でファイルを削除できます
[Code]
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then begin
DeleteFile(ExpandConstant('{commondesktop}\Oracle VM VirtualBox.lnk'));
..
最後に私がしたことはこれです。
[InstallDelete]セクションに元のMSIパッケージファイルが存在する場合、それらを削除しようとしましたが、フォルダーはまったく削除されません。その後、「deleteafterinstall」フラグを使用して同じ場所にダミーファイルとフォルダーを抽出して削除します。それら。
これを改善できると思われる場合は、その方法を教えてください。約200のインストーラーに対して「一般的な」方法が必要なため、外部コードを使用したくありません。その量のコードを記述します。インストーラーの多くは時間がかかります。
#define InstallerName "VirtualBox-4.2.16-r86992-MultiArch_AMD64.msi"
#define ExtensionName "Oracle_VM_VirtualBox_Extension_Pack-4.2.16-86992.vbox-extpack"
[Setup]
AppName=VirtualBox
...
...
[InstallDelete]
Name: {commondesktop}\Oracle VM VirtualBox.lnk; Type: files
Name: {commonstartmenu}\Programs\Oracle VM VirtualBox; Type: filesandordirs
[Dirs]
Name: {commonstartmenu}\Programs\Oracle VM VirtualBox; Flags: deleteafterinstall; attribs: hidden
[Files]
Source: {commondesktop}\Oracle VM VirtualBox.lnk; DestDir: {commondesktop}; Flags: deleteafterinstall ignoreversion; Attribs: hidden
Source: {tmp}\*; DestDir: {tmp}; Flags: deleteafterinstall recursesubdirs createallsubdirs ignoreversion
[Icons]
Name: {userstartmenu}\Programs\Multimedia\VirtualBox; Filename: {app}\virtualbox.exe; WorkingDir: {app}
[Run]
Filename: {tmp}\{#InstallerName}; Parameters: "/passive /norestart ADDLOCAL=VBoxApplication INSTALLDIR=""{app}"""; StatusMsg: Instalando VirtualBox...; Flags: shellexec RunHidden WaitUntilTerminated
Filename: {tmp}\xml.exe; Parameters: "ed --inplace -N N=""http://www.innotek.de/VirtualBox-settings"" --update ""//N:ExtraDataItem[@name='GUI/UpdateDate']/@value"" --value never ""{%userprofile}\.virtualbox\virtualbox.xml"""; StatusMsg: Instalando VirtualBox...; Flags: RunHidden WaitUntilTerminated
Filename: {app}\VBoxManage.exe; Parameters: "extpack install --replace ""{tmp}\{#ExtensionName}"""; StatusMsg: Instalando Extension Pack...; Flags: RunHidden WaitUntilTerminated
Filename: {app}\virtualbox.exe; Description: {cm:LaunchProgram,VirtualBox}; Flags: shellexec postinstall unchecked skipifsilent nowait