转载:http://blog.csdn.net/zztoll/article/details/54018615#comments

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

InstallShield 2015 Premier的Basic MSI Project如何在卸载时删除残留的文件 (转)的更多相关文章

  1. InstallShield Basic MSI工程常见问题解答[转]

    1.  问题描述:采用何种安装模式?实现方法:如果对用户界面等自定义要求不高的话,建议用Basic Msi Project,否则用InstallScript MSI Project. 2.  问题描述 ...

  2. Basic MSI silent install

    Articles and post about silent install for Basic MSI, InstallScript, InstallScript MSI: Silent-mode ...

  3. InstallShieldPro 2015中Basic MSI工程类型如何调用InstallScript脚本

    转载:http://blog.csdn.net/mengzhishen/article/details/8953901 这是一个Basic MSI基础知识. A. 首先在Installation De ...

  4. NEWS - InstallShield 2015 正式发布

    如果您需要为Windows®应用程序创建安装,InstallShield®便是您的最佳解决方案.在为桌面.服务器.云.Web和虚拟环境构建可靠的Windows Installer (MSI)和Inst ...

  5. InstallShield 2015 Limited Edition 打包教程

    InstallShield 2015 Limited Edition 打包教程 右键解决方案,新增项目,选择其他项目类型,安装和部署. InstallShield2015可以免费使用,但需要下载.安装 ...

  6. 让InstallShield 2015 Limited Edition for Visual Studio 2015生成的setup.exe双击时以管理员权限运行

    转载:http://blog.csdn.net/zztoll/article/details/52096700 如题,如何让InstallShield 2015 Limited Edition for ...

  7. InstallShield 2015 安装 在vs2015

     网上很少注册InstallShield 2015  的方法,而且很多以前版本的注册也很笼统,今天我就说说几个细节上的问题.相信大家看了会有帮助,有问题回帖,我会及时跟上, 先说说我遇到的问题 安装: ...

  8. InstallShield 2015 LimitedEdition VS2012 运行bat文件

    转载:http://www.cnblogs.com/fengwenit/p/4271150.html  运行bat文件 网上很多介绍如何运行bat的方法,但我这个是limted 版本,不适用. 1. ...

  9. 应用InstallShield 2015打包软件打包C#程序

    大家都明白,程序员写出的程序与用户直接使用的程序之间还有一个简单的环节,就是打包.今天就简单介绍下用InstallShield 2015打包工具进行程序的打包, 有兴趣的可以看看! 首先前面安装打包工 ...

随机推荐

  1. 【go】go语言socket通信样例

    server.go package main import ( "net" "fmt" "io" ) func main() { liste ...

  2. JavaIO简单代码实例

    最近又复习了下JavaIO写了些实例代码都很简单但是能体现大部分方法的用法. IO流实现文件的拷贝   几种不同的方法: package com.wxisme.TestIO; import java. ...

  3. JavaWeb温习之HttpServletResponse对象

    以下内容均根据"方立勋JavaWeb视频教程"进行总结 1. HttpServletResponse常见应用——设置响应头控制浏览器的行为 1.1 设置http响应头控制浏览器禁止 ...

  4. Struts2中的OGNL详解 《转》

    首先了解下OGNL的概念: OGNL是Object-Graph Navigation Language的缩写,全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的 ...

  5. mysql in查询排序问题

    SQL: select * from table where id IN (3,6,9,1,2,5,8,7); 这样的情况取出来后,其实,id还是按1,2,3,4,5,6,7,8,9,排序的,但如果我 ...

  6. mysql优化之explain备忘笔记

    今天使用explain来查看sql执行情况的时候发现有的东西忘掉了,故作此篇文章来强化此知识点的记忆. 1.explain作用 exlain 执行结果显示了mysql 存储引擎如何使用索引来处理sel ...

  7. EUI List列表实现人物列表 (List的Item复用,Item获取)

    一  Scroll+List ,拖动组件到exml. List不能写定高度,不然无法自动扩展.  二 新建List条目皮肤, ListItemSkin皮肤 条目皮肤下有:一个红色背景Rect,头像Im ...

  8. WCF(四) 绑定

    绑定 是一个制定好的通道栈,包含了协议通道,传输通道和编码器.从功能上来看,一个绑定集成了通信模式.可靠性.安全性.事务传播和互操作性 绑定方式分两种:代码中和配置文件中绑定 1: 2: 3.配置ap ...

  9. shell中的多进程【并发】(转)

    http://bbs.51cto.com/thread-1104907-1-1.html

  10. js获取当前域名

    <script language="javascript"> //获取域名 host = window.location.host; host2=document.do ...