InstallShield 工程类型installscript,如何覆盖安装?-阿里云开发者社区

开发者社区> 杰克.陈> 正文

InstallShield 工程类型installscript,如何覆盖安装?

简介: 原文 http://www.cnblogs.com/daocaorenbx/p/3305162.html 开始使用的msi工程类型。网上找了资料, 在kevin的博客里找到这条方法 可以通过删除Execute Sequence中的RegisterProduct和PublishProduct两个CA实现同样的需求。
+关注继续查看

原文 http://www.cnblogs.com/daocaorenbx/p/3305162.html

开始使用的msi工程类型。网上找了资料, 在kevin的博客里找到这条方法 可以通过删除Execute Sequence中的RegisterProduct和PublishProduct两个CA实现同样的需求

试过之后确实是可以 重复安装的,但是 开始菜单的中的卸载是无法卸载的,而且控制面板是不能显示该程序的。所以此方法不可行。

换了个工程类型,使用 installscript工程类型,此类型的 脚本中 advanced下面有个 OnShowUI,即存放的检测是已安装、更新、还是第一次安装 的脚本,修改逻辑第一安装外的情况 继续执行 安装脚本 

在 卸载的快捷方式中添加一个参数 -removeonly,检测判断此参数为卸载功能。

修改代码如下: 

 

复制代码
function OnShowUI()
BOOL    bMaintenanceMode, bUpdateMode;
string    szIgnore, szTitle;
begin
        
        // Enable dialog caching
        Enable( DIALOGCACHE );
        
        // Determine what events to show.
        bUpdateMode    = FALSE;
        bMaintenanceMode = FALSE;
    
        // Remove this to disabled update mode.
        if( UPDATEMODE ) then
            bUpdateMode = TRUE;
        endif;

        // Remove this to disable maintenance mode.
        if ( MAINTENANCE ) then
            bMaintenanceMode = TRUE;          
        endif;

        // Show appropriate UI

        // TODO: Enable if you want to enable background etc.
        //if ( LoadStringFromStringTable( "TITLE_MAIN", szTitle ) < ISERR_SUCCESS ) then // Load the title string.
        //    szTitle = IFX_SETUP_TITLE;
        //endif;
        //SetTitle( szTitle, 24, WHITE );
        //Enable( FULLWINDOWMODE );                           
        //Enable( BACKGROUND );
        //SetColor( BACKGROUND, RGB( 0, 128, 128 ) );
        
    
        /*if( bUpdateMode ) then
            OnUpdateUIBefore();
        else
            if ( bMaintenanceMode ) then
                OnMaintUIBefore();
            else
                OnFirstUIBefore();
            endif;
        endif; */     
       // OnFirstUIBefore(); 
       
        if( REMOVEONLY )   then   
            //    MessageBox ("卸载", SEVERE);
                OnMaintUIBefore(); 
        else               
            if( bUpdateMode ) then   
             //    MessageBox ("更新", SEVERE);
                OnUpdateUIBefore();
             else  
                 if ( bMaintenanceMode ) then  
                     
                    if( MessageBox( "您已安装最新版本,是否覆盖安装?" , MB_YESNO ) != IDYES ) then
                        abort;
                    endif;                        
                    OnFirstUIBefore();     
                    FeatureReinstall(); 
                else
                //    MessageBox ("第一次安装", SEVERE);                   
                    OnFirstUIBefore(); 
                endif;
             endif; 
        endif;

        // Move Data
        OnMoveData(); 
        
        //OnFirstUIAfter();  
        if( REMOVEONLY )   then
                OnMaintUIAfter();
        else            
                OnFirstUIAfter();            
        endif;

        
    /*    
        if( bUpdateMode ) then
            OnUpdateUIAfter();
        else
            if ( bMaintenanceMode ) then
                OnMaintUIAfter();
            else
                OnFirstUIAfter();
            endif;
        endif;  
      */
        // Disable dialog caching
        Disable(DIALOGCACHE);

end;

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
龙芯派2代开发日记-安装opencv2-交叉编译py3.8
龙芯派2代开发日记-安装opencv2-交叉编译py3.8
42 0
JavaScript 项目构建工具 Grunt 实践:安装和创建项目框架
   Grunt 是一个基于任务的 JavaScript 项目命令行构建工具,运行于 Node.js 平台。Grunt 能够从模板快速创建项目,合并、压缩和校验 CSS & JS 文件,运行单元测试以及启动静态服务器。
580 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
3971 0
InstallShield 工程类型installscript,如何覆盖安装?
原文 http://www.cnblogs.com/daocaorenbx/p/3305162.html 开始使用的msi工程类型。网上找了资料, 在kevin的博客里找到这条方法 可以通过删除Execute Sequence中的RegisterProduct和PublishProduct两个CA实现同样的需求。
801 0
+关注
杰克.陈
一个安静的程序猿~
9798
文章
2
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载