我需要在安装完成后删除一些文件。
我正在使用[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
答案 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