InstallShield安装包制作

来源:互联网 发布:复旦大学材料系 知乎 编辑:程序博客网 时间:2024/04/29 17:58

 InStallShield支持修改Autoexec.bat, config.sys、注册表、加入产品 册 码,自动生成反安装程序等等满足安装编写所有开发者的需求涵盖所有平台操作系统及装置上提供三款功能强劲且使用简易的解决方案.可以说是最好的做安装程序的商业软件之一。因为功能的太过于强大,要写脚本,而文档较少与神马帮助文档,所以上手比较困难。此文档是基于2009版本编写。

官网地址:http://www.flexerasoftware.com/products/installshield.htm

下载地址(2009) http://www.rsdown.cn/downinfo/9401.html

下载地址(2012) http://www.flexerasoftware.com/asp/eval_is.asp?ver=ISWPRE190E


1协议许可证

           以上完成的没有协议许可证.。虽然大多都不会看协议内容,当东西部可少。

        Behavior and Logic | Support Files/Billboards中添加协议文件,至于协议文件的类型我也不太清楚,我试过txt可以,所有我就用txt。切换到 Behavior and Logic | IInstallScript 会有个默认的Setup.Rul文件.选择右边的Before Move Data OnBegin.不要看见默认选择这两个就不选,要看左边框Functions下是否有你选择的方法文件.

 Disable(BACKBUTTON);

     if(!MAINTENANCE)then

    SdLicense2 ("协议许可证 ", "我接受协议许可证中的条款", "我不接受协议许可证中的",    SUPPORTDIR ^ "securityManagerProtocol.txt", FALSE);

    endif;


2第三方软件的使用

      比如在协议许可证后我要安装个第三方软件,或者判断下是否安装过某软件。

   怎么判断呢?每个软件安装后注册,所有通过注册表,进行判断。就以JDK为例。

Begin     

    RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);

    if (RegDBKeyExist ("SOFTWARE\\JavaSoft\\Java Development Kit\\1.6.0_04") < 0) then

       LaunchAppAndWait(SRCDISK^"jdk\\jdk-6u4-windows-i586-p.exe","",LAAW_OPTION_WAIT);   endif;

  End


3删除用户名/公司名界面

  一开始制作IntallShield工具有默认这个界面,但对我们来说用处不大,所有希望屏蔽

 打开Before Move Data  OnFirstUIBefore

Dlg_SdRegisterUser:就是编写的这个界面,因此屏蔽/替换 Dlg_SetupType:中 goto SdRegisterUser; 顺便屏蔽Dlg_SdRegisterUser:包括的内容(没有用何必浪费资源).


4是否创建桌面快捷键界面

OnFirstUIAfter begin end中代码

      bOpt1 = FALSE;

      bOpt2 = TRUE;

      szMsg1 = SdLoadString(IFX_SDFINISH_MSG1);

      szTitle="";

      szMsg2="";

      szOpt1="";

      szOpt2="创建桌面快捷键";

      SdFinishEx(szTitle, szMsg1, szMsg2, szOpt1, szOpt2, bOpt1, bOpt2);  

      if(bOpt2=TRUE) then                     

        szDocFile = TARGETDIR^"bin\\startup.bat";      

        LongPathToQuote(szDocFile, TRUE );

        AddFolderIcon ( szProgramFolder, szItemName, szDocFile , szWorkingDir, 

                     szIconPath, nIcon, szShortCutKey, nFlag );

      endif; 


5操作服务

   就以InstallShield 编写Mysql服务为例进行说明.

   ServiceAddService      

   ServiceStartService

   ServiceStopService

   ServiceRemoveService

 5.1准备MySql,

     必须包含my.ini 。因软件安装目录不确定,所有不用指定basedirdatadir

   当这两个要指定,可能会想到相对位置,我也试过,但不成功,我也不知道为什么。

   指定的方式有很多种,这里我使用通过bat 动态写入.

     @echo off

      set CURRENT_DIR=%cd%

      echo %CURRENT_DIR%

      set CURRENT_DIR=%CURRENT_DIR:\=/%

      echo %CURRENT_DIR%

      echo basedir=%CURRENT_DIR% >>my.ini

      echo datadir=%CURRENT_DIR%/data >>my.ini

代码讲解:

  <1> set CURRENT_DIR=%CURRENT_DIR:\=/% 是将%CURRENT_DIR%的值“\”代替

   “/”。原因是开始我用的“\”,服务启动不成功,后来改成“/”才成功。

      <2> echo basedir=%CURRENT_DIR% >>my.ini

          echo datadir=%CURRENT_DIR%/data >>my.ini

         将basedirdatadir写入my.ini文件。注意“>>”是写入; ">"是覆盖整个文件

 5.2编写InstallShield脚本

     LaunchApp(TARGETDIR^"db\\mysql-6\\set_dir.bat",""); 

                               

     szServiceName="MySQL";

     szServiceDisplayName="MySQL";

     szServiceDescription="";

     szServicePathFile=TARGETDIR^"db\\mysql-6\\bin\\mysqld-nt.exe";

     bStartService=0;

     szStartServiceArgs="";

 ServiceAddService(szServiceName,szServiceDisplayName,szServiceDescription,    szServicePathFile, bStartService, szStartServiceArgs );    

     ServiceStartService(szServiceName,"")

     通过ServiceAddService (....)添加服务

     ServiceStartService(szServiceName,"")启动服务szServiceName服务名,第二个参数是启动方式表示自动启动。


6 删除服务

   在OnMaintUIBefore()中if(!REMOVEONLY)then 写入

   ServiceStopService(szServiceName) 停止服务。szServiceName为服务名.

   ServiceRemoveService(....)         删除服务.

   ServiceStartService(szServiceName,"")


7错误提示

   7.1 “the Setup was created with an evaluation version of InstallShield"

评估版的就会有这个提示,要解决就要用完全版.

   7.2 Error 4075: 

    File not found. An error occurred merging Module

MDAC27ENU.C9C35FC7_5AEE_4C1E_8BD2_80ED9FA87FFF:1033 for Feature "".

      这个错误是由于InstallShield工具缺少MDAC27ENU.msm 文件.下载后将文件放    InstallShield安装目录的\Objects 文件夹下.

   7.3 Error C8025

      解决这个错误要注意几点:<1>声明标识符必须在引用之前 <2> 检查声明的标识符类型 

                             <3>引用标识符的是否声明

  7.4 桌面快捷键无效

问题有三:是否具有所需环境,并且环境配置正确.比如:JDK环境变量

          2 快捷方式的目标是否正确.

          3 快捷方式的起始位置是否正确.起始位置是目标的上一级.


8.1 准备安装界面

Installscript MSI Project 准备安装界面是InstallShield自发性视窗,无法隐藏. Installscript 中可以隐藏,当准备毫无反应.,就像死机一样.Installscript MSI Project的 Installation Designer ->Media->Releases ->Setup.exe Delay MSI Engine Reboot 设置为true,编程小窗口.Ico图片将被隐藏.

不过执行编译打包之后又会原形.网上也没相关资料,帮助文档中也没找到.通过推测,多次验证后发现一种方法可以解决这问题。将进行生成的setup.exe覆盖执行编译打包生成的setup.exe.