zoukankan      html  css  js  c++  java
  • InstallShield 2015 Premier的Basic MSI Project如何在卸载时删除残留的文件 (转)

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

  • 相关阅读:
    Java注解详解
    浅析@Deprecated
    BeanUtils使用概要
    使用内省方式操作JavaBean
    怎样通过ajax提交数据
    Java 反射学习笔记
    jackson 学习笔记
    Dom4j 学习笔记
    Tensorflow打造聊天机器人
    Hive官方文档
  • 原文地址:https://www.cnblogs.com/chechen/p/6341040.html
Copyright © 2011-2022 走看看