转载:
先说下缘由,我在用InstallShield 2015 Premier新建工程时选的Basic MSI Project,且程序在运行中会在安装目录下生成数个文件,但卸载程序时,因为安装目录下有新生成的文件的原因,安装目录及其中的新生成文件会残留,而导致卸载不完全
当然如果你新建工程时是选用的InstallScript MSI Project,可参见此文做法:http://www.hiadmin.org/2010/04/13/installshield-deletedir/
下面说下在Basic MSI Project下的操作步骤
1.进到Behavio and Logic->InstallScript,在Files上点右键,选New Script File,会在Files下生成一个Setup.rul,点Setup.rul可看到脚本内容,并看到已生成一个默认的MyFunction的函数,将此函数更名为你自己的函数名称,如DeleteFiles2.在函数体加入删除文件或文件夹的代码,如function DeleteFiles (hMSI) // To Do: Declare local variables.begin DeleteDir (TARGETDIR^"\config",ALLCONTENTS); DeleteFile(TARGETDIR^"\my.cfg"); end;3.进到Custom Actions and Sequences,在Custom Actions上点右键,选New InstallScript,会在Custom Actions下面生成NewCustomAction1项, 点NewCustomAction1在Function Name中选DeleteFiles,在 Install Exec Sequence中选After ISUnSelfRegisterFiles
因为是Basic MSI Project工程,无法限定此函数在指定的的UnInstalling事件中执行,所以此函数会在安装时和卸载时执行两次, 所以选择DeleteFiles执行的时机尤为重要,经我验证,选在After ISUnSelfRegisterFiles,不会造成误删文件
也顺便吐槽一下InstallShield
- 选择Basic MSI Project工程却无法在写脚本时关联事件, - 选择InstallScript Project工程可以关联事件却没了预设的对话框 - 选择 InstallScript MSI Project工程可关联事件,有预设对话框却无法方便的更改对话框的执行顺序。 如果新建的每个工程都可以实现同样的操作,而新建工程时列出的模板只是替用户配置了可操作的选项,工程建立后可随意增加配置或减少配置,这样不是更方便用户使用吗?
4.补充一点
上面是转载别人的,可我在 Install Exec Sequence中没有找打After ISUnSelfRegisterFiles这个选项,第一次用默认的First Action,发现程序运行过程中生成的文件删除不了;所以选了一个 After UnregisterExtensionInfo 进行测试,发现可以删除运行中生成的文件。在此记录一下。