InstallShield详细制作说明(三)

八、许可协议

打开【Installation Designer】->【Behavior and Logic】->【Support Files/Billboards】面板

这里【Language Independent】是指的设置将在任何语言下都会起作用相当于默认,下面还有【中文(简体)】,就相当于分支,只有中文下起作用。这里我们就只做通用的,在【Language Independent】,添加“软件许可协议.txt”文件。

然后,再点击【Disk1】,这里我们存放一些运行系统所需的先决条件,这些文件是不会打包到setup.exe里面,而是跟setup.exe平级的,因为这些条件不是每台机器都需要的,也不属于产品内的东西。

九、安装脚本

这部分是最复杂,也是最重要的。打开【Installation Designer】->【Behavior and Logic】->【InstallScript】面板

脚本事件主要有三大类:Before Move Data(安装数据前)、Move Data(安装数据过程中)、After Move Data(安装数据后)。

OnBegin:在初始化后,被调用

OnFirstUIBefore:第一次安装时,在复制安装数据之前触发的事件,更改这个事件的脚本可自定义安装步骤(一般我们都是修改这个)

OnMainUIBefore:在修改或卸载时,在复制安装数据之前触发的事件,例如安装程序在安装时添加了服务,在卸载时安装程序不会将此服务反安装,这就需要脚本删除服务。

OnSQLLogin:Ms SQL SERVER数据库安装登录函数。

MoveData:一般很少有人会去改

OnFirstUIAfter: 第一次安装时,在复制安装数据之后触发的事件,例如有些地方需要设置路径,在安装前路径不存在,必须安装后才能设置。

OnMainUIAfter: 在修改或卸载时,在修改或卸载数据之后触发的事件

OnEnd:在安装完成之后触发的事件,即点击【完成】按钮后触发的事件。

 

我们先写许可协议界面,可以看到现在脚本是空的。在右侧,将下拉列表选为【BeforeMoveData】【OnBegin】。这里注意不要看当前是OnBegin,就不选了,一定要选一下,才会触发代码生成。begin与end之间的内容就是我们要具体要执行的动作了。

function OnBegin()

begin

         //禁用上一步

Disable(BACKBUTTON);

         //判断安装程序处于何种状态,安装、修复、重新安装或卸载状态,后三者属于MAINTENANCE状态,因此判断只有在正常安装的状态下才显示许可协议

if(!MAINTENANCE)then

         //TRUE表示默认选中接受协议

SdLicense2("软件许可协议","","",SUPPORTDIR^"软件许可协议.txt",TRUE);

         endif;

end;  

  •  

SdLicense2(szTitle,szOpt1,szOpt2,szLicenseFile,bLicenseAccepted);

参数szTitle: 界面左上角的标题,填””则默认为”License Agreement”

参 数szOpt1、szOpt2:两个选项“同意”和“不同意”。默认值“I accept the terms of the license agreement”和“I do not accept the terms of the license agreement”

参数 szLicenseFile:指定需要显示的文档,包含路径和带扩展名的文档名。“软件许可协议.txt”上面放在了supportfile下了,这个路 径在Installshield里有专门的静态变量,即SUPPORTDIR,后面再加上文件名,用^来连接,文件名需要加引号

 

这 里细说一下SdLicense2,这个你可以去【User Interface】->【Dialogs】,下面了一堆的对话框,你也可以自定义对话框。所以上面SdLicense2直接就是对话框的名字,这 种用法就跟构造器一样,那参数呢,你可以看到对话框右侧下方,有简单说明,你点击那个链接就会打开API文档了,那里会详细解释每个字段的含义。

下面在OnFirstUIBefore中添加先决条件和安装路径,点击下拉列表生成代码

如 果上面你已经试过编译,你会发现安装的步骤还挺多的,其实每一个步骤都对应着生成的代码中的Dlg_XXXXXX,有很多可能你都不需要的,下面是我修改 后的代码。主要就是检查是否安装了NetFramework,MySQL,没有则安装,另外就是让用户指定要安装的Feature。Dlg_XXXXXX 是按顺序执行的,当然你也可以看到通过goto可以跳转。

function OnFirstUIBefore()

    NUMBER nResult, nSetupType, nvSize, nUser;

    STRING szTitle, szMsg, szQuestion, svName, svCompany, szFile;

    STRING szLicenseFile;

         BOOL bCustom, bIgnore1, bIgnore2;

         STRING SETUPEXEDIR[MAX_PATH + 1];   //获取安装程序Setup.exe自身所在的路径

    NUMBER nBuffer; // local buffer-size variable                         

    STRING  svMsiexec,svMsiPackage,svParam;

begin       

    if( REMOVEONLY ) then

        Disable( DIALOGCACHE );

                   szMsg = SdLoadString( IDS_IFX_ERROR_PRODUCT_NOT_INSTALLED_UNINST );

               SdSubstituteProductInfo( szMsg );

                   MessageBox( szMsg, SEVERE );

                   abort;

    endif;

   

         nSetupType = TYPICAL;   

 

Dlg_SdWelcome:

    szTitle = "";

    szMsg = "单击'下一步',将安装XX产品,如果有先决条件未安装,将会先安装先决条件";

   

    nResult = SdWelcome(szTitle, szMsg);

         if (nResult = NEXT) then

             //检查先决条件   

        //设置默认的注册表键值根节点为HKEY_LOCAL_MACHINE

             RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);

             MsiGetProperty(ISMSI_HANDLE, "SETUPEXEDIR", SETUPEXEDIR, nBuffer);

            

             //判断.netFramework 4.0

             if(RegDBKeyExist("SOFTWARE\\Microsoft\\NET Framework Setup\\NDP\\v4\\Full")<0) then

                if(LaunchAppAndWait(SETUPEXEDIR^"dotNetFx40_Full_x86_x64.exe","",LAAW_OPTION_WAIT)<0)then

                   MessageBox("安装NetFramework4.0失败",INFORMATION);

                endif;

             else

                //MessageBox("系统已安装NetFramework4.0",INFORMATION);

             endif;

            

             //判断MySQL

             if(RegDBKeyExist("SOFTWARE\\MySQL AB")<0) then

                if(LaunchAppAndWait(SETUPEXEDIR^"install_mysql.bat","",LAAW_OPTION_WAIT)<0)then

                   MessageBox("安装MySQL失败",INFORMATION);

                endif;

             else    

               // MessageBox("系统已安装MySQL",INFORMATION);

             endif;

       

            goto Dlg_SdFeatureDialog;

         endif;

        

 Dlg_SdFeatureDialog:

          szTitle = "";

          szMsg = "";

          nResult = SdFeatureDialog(szTitle, szMsg, INSTALLDIR, "");

          if (nResult = BACK) goto Dlg_SdWelcome;   

        

     // Added in IS 2009 - Set appropriate StatusEx static text.

     SetStatusExStaticText( SdLoadString( IDS_IFX_STATUSEX_STATICTEXT_FIRSTUI ) );

 

     // setup default status

     Enable(STATUSEX);

     return 0;        

end;

 

上面调用mysql的时候用的bat间接调用的,msi貌似能直接调用,但是我试了很多,没有试出来,如果试出来请告知。

这里我并没有研究太多的脚本代码,只是基本上实现了自己的需求,把一些难点都用database.exe的方式去实现了,不得不承认研究这个真的很头疼,需要深入研究的同仁,可以多学习。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
InstallShield是一款用于创建Windows安装程序的软件。它提供了一套完整的工具和功能,帮助开发人员快速、简便地创建和定制安装程序。 InstallShield的帮助文档是开发者学习和使用InstallShield的宝贵资源。帮助文档详细说明InstallShield的各种功能和工具的使用方法,并提供了丰富的示例和代码。开发人员可以通过查阅帮助文档,快速了解InstallShield的特性和功能,从而更高效地创建和管理安装程序。 帮助文档主要包括以下内容: 1. 安装指南:提供了从安装InstallShield开始的详细步骤和注意事项,帮助用户准备好使用InstallShield的环境。 2. 界面介绍:介绍了InstallShield的主要界面,包括工具栏、菜单、项目资源窗口等,帮助用户熟悉和了解软件的界面布局。 3. 创建安装程序:详细说明了如何使用InstallShield的向导和模板来创建安装程序,包括选择安装类型、添加文件和设置注册表等。 4. 定制安装程序:介绍了如何通过自定义脚本和条件表达式来定制安装程序的行为,包括设置安装路径、选择安装组件和启用自定义选项等。 5. 发布和部署:说明了如何将创建好的安装程序打包成可执行文件,以及如何将其部署到目标计算机上进行安装。 6. 故障排除:提供了一些常见问题和解决方法,帮助开发人员在使用InstallShield的过程中快速解决可能出现的问题。 总的来说,InstallShield的帮助文档是开发人员学习和使用InstallShield必不可少的参考资料,它为用户提供了全面而详细的指导,使开发人员能够更加轻松地创建、定制和部署Windows安装程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值