在InnoSetup中安装后删除文件

时间:2013-09-03 17:34:04

标签: file installer inno-setup

我需要在安装完成后删除一些文件。

我正在使用[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

3 个答案:

答案 0 :(得分:12)

您可以在CurStepChanged事件处理程序

的安装后步骤中删除文件
[Code]
procedure CurStepChanged(CurStep: TSetupStep);
begin
  if CurStep = ssPostInstall then begin
    DeleteFile(ExpandConstant('{commondesktop}\Oracle VM VirtualBox.lnk'));
    ..

答案 1 :(得分:11)

如果您尝试删除临时文件(例如,子安装所需):

安装到{tmp}的任何内容都会在安装结束时自动删除。

如果由于某种原因您无法安装到{tmp},那么您可以使用deleteafterinstall条目上的[Files]标记。

如果您尝试删除该子安装程序创建的文件,那么您应该联系供应商或检查他们的文档,看看是否有一个命令行参数,您可以通过该参数来禁止首先安装该项目。通常应该有桌面图标等可选项。

答案 2 :(得分:2)

最后我做的就是这个。

Firts我尝试删除原始的MSI包文件(如果它们存在于[InstallDelete]部分中但是根本没有删除该文件夹,那么之后我使用“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