博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
InstallShield 2015 Premier的Basic MSI Project如何在卸载时删除残留的文件 (转)
阅读量:5161 次
发布时间:2019-06-13

本文共 1444 字,大约阅读时间需要 4 分钟。

转载:

先说下缘由,我在用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的函数,将此函数更名为你自己的函数名称,如DeleteFiles
2.在函数体加入删除文件或文件夹的代码,如

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 进行测试,发现可以删除运行中生成的文件。在此记录一下。

转载于:https://www.cnblogs.com/chechen/p/6341040.html

你可能感兴趣的文章
C语言初学 俩数相除问题
查看>>
B/S和C/S架构的区别
查看>>
[Java] Java record
查看>>
jQuery - 控制元素显示、隐藏、切换、滑动的方法
查看>>
postgresql学习文档
查看>>
Struts2返回JSON数据的具体应用范例
查看>>
js深度克隆对象、数组
查看>>
socket阻塞与非阻塞,同步与异步
查看>>
团队工作第二天
查看>>
System类
查看>>
tableView
查看>>
Happy Great BG-卡精度
查看>>
Xamarin Visual Studio不识别JDK路径
查看>>
菜鸟“抄程序”之道
查看>>
Ubuntu下关闭防火墙
查看>>
TCP/IP 邮件的原理
查看>>
原型设计工具
查看>>
windows下的C++ socket服务器(4)
查看>>
css3 2d转换3d转换以及动画的知识点汇总
查看>>
【Java】使用Eclipse进行远程调试,Linux下开启远程调试
查看>>