转自:http://chorfung.blog.163.com/blog/static/1207120002010320104717707/

2|我的照片书  |

一. 说明

阅读对象:本人,IS的初学者。
适用版本:Installshield 12。
目的:       为了让初学IS的朋友少走些弯路,虽然不是很好的宝典,但里面很多细节都是制作安装包常碰到

的经典问题。另外,也为了给自己留一些资料,方便以后查询,人的记忆力有限嘛。
 内容:      制作一个简单的安装包;制作定制的安装包;其它细节注意;

二. Installshield 介绍。
1. 公司介绍。

InstallShield 软件公司是美国的一家专业从事安装软件开发工具生产的著名软件公司。该公司由Viresh Bhatia和Rick Harold于1987年创建。自Windows软件开发之初,InstallShield软件公司就已经专注于通用安装软件制作工具的开发并解决Windows操作系统发展和变革所带来的挑战,以满足开发人员及最终用户的需要。其主打产品InstallShield为满足各种平台和不同的安装需求提供完整的软件安装解决方案,并且已经形成人们所熟悉的一套软件安装的工业标准。

2. 产品介绍。

在微软Windows 2000操作系统引入Windows Installer(WI)服务之前,InstallShield公司以其拥有的标准的标准和技术在同类公司中遥遥领先。但由于WI的出现后,WI使得用户可以利用微软提供的API函数构建符合微软标准的安装软件,并充分享用微软WI服务的诸多好处。为了跟上安装软件技术的自然进化,满足用户的需求和接受新挑战,1999年9月,InstallShield 公司开始宣布InstallShield2000 专业版(简称ISPro2K)面世,这是该公司首次将软件安装开发工具划分采用自身传统标准的InstallShield Professional 和采用 微软标准Windows Installer标准的InstallShield for Windows Installer两个不同版本。

三. 制作简单的安装软件。
声明:下面的教程,是把读者当做完全没接触过IS的角度来制作的。
1. 启动InstallShield 12。建立一个InstallShield MSI Project,如图:

2. 建好后,选择Project Assistant.

你会发现下边有8个选项。接下来就一项一项开始设置。

3. 点击Application Information.

输入公司名称,应用程序的名称(注意:这个不是打包完后安装包的名称,默认的安装包名称为Setup.exe,不过可以自己定义,稍后讲),版本号,公司网址,选择“添加/删除程序”中的图标。

4. 点击Installation Requirements.

这里可以选择自己的打包软件适合运行的操作系统和必须安装的第三方软件。选不选根据自己的需要。

5. 点击 Installation Achitecture。

这里可以定义打包文件的组织结构,默认有个DefaultFeature,将文件放在这个feature下,则都默认是必须安装的。有印象的朋友会记得,在安装某些软件的时候,会有,“typical(典型)”“custom(自定义)”界面提示,选择典型安装,就是所有文件都安装,选择自定义安装,就可以去掉一些不需要安装的文件,但其它文件就是必须安装的。这个还是需要自己反复折腾一下才能明白。至于怎么加文件到feature下面,稍后讲述。

6. 点击 Application Files。

这里讲述如何添加文件。上面图片的红色区域中的文件就是我加进去的,加到了安装目录下了(注意:有个INSTALLDIR)。在这里,你就可以把你要打包的所有文件加进来。加入你安装目录下有文件夹,则先在左边右击GAGA,添加文件夹,再往里面添加文件。注意:添加完文件后,全选文件,右击,选中“Always Overwrite”。否则有时会出现重新安装后,有些文件没有被覆盖。

7. 点击 Application shortcut。

为自己的安装程序生成快捷方式,可以创建 开始菜单和桌面的快捷方式,细心发现的话,你会看见左边有个“Create an uninstallation shortcut”的选项,那个就是用来创建一个卸载方式的,不过很遗憾,这个快捷方式卸载后有时会有些文件删除不干净,不能做到完美卸载。关于怎么创建卸载快捷方式,做到完美卸载,在后面会讲。

8. 点击 Application Registry。

点完后就直接跳过吧,简单的安装工程,基本不用到这个。要了解如何操作注册表,在后面会说。

9. 点击 Installation Localization。

这里我们选上“Chinese”,默认是选上英文。如果要设置中文为默认语言的话,需要点击Installation Designer->Installation Information->General Information->String table,右击Chinese,选择 “Make default”。如图:

返回Project Assistant.这下还可以把英文去掉,因为之前英文被设为默认,所以不能直接在这里去掉,非得这么折腾一番。

10.  点击 Build Installation。

这里可以选择Single 或者 CD-ROM,区别在于第一种只生成一个.exe文件,而后者会生成好多文件,包括.msi文件等。第一种生成格式适合于制作升级程序,一般的升级程序都只要一个.exe文件就好了。点击“Build Installations”就可以生成安装包了,生成的安装包,点击"Open release folder”就可以找到了。

四. 制作定制的安装软件。

声明:该部分主要是根据自己本身在项目当中打包安装软件的时候碰到的一些问题,稍微整理一下作为这部分主要讲解的内容,由于项目功能的局限还有本人能力的有限,只能讲解自己解决的一些经典问题,并不能全面覆盖到强大的IS的各个方面,仅供读者参考。
这部分的内容貌似比较吸引人哦,“定制”两字给人比较实用,有趣的感觉。
这部分内容我们和上面制作简单的安装软件走不一样的道路,这部分内容需要新手对IS有一定的折腾后再来看,就比较适合啦。废话不再讲,开始讲解吧。

点击 Installation Designer ,如图:

1. 点击 Installation Information
管理员权限安装设置:

点击 General Information ,选择 Summary Information Stream, 选择 Require Administrative Priviledge, 将该项选择 “Yes”。这样设置之后,用户就可以有管理员的权限去安装该安装文件了,避免用户在安装的时候出现权限不够的问题。如图:

更改“添加/删除程序”面板中软件的图标。

General Information -> Add or Remove Programs -> Display Icon

设置”添加/删除程序”面板中软件可卸载。

General Information -> Add or Remove Programs -> Disable Change Button, Disable Remove Button, Disable Repair Button,这三个至少要有一个选为“NO”,全部设为“YES”的话,则在这个面板中,对应的软件没有“更改/删除”的按钮可以点击,即在这里就卸载不了软件了。那就得自己去注册表里胡搞乱改,把它搞掉了。

设置“软件名称”,“版本号”还有“安装路径”。

General Information -> Product Properties->NAME ,VERSION,INSTALLDIR

关于“Product Code”和“Upgrade Code”以及版本升级问题。

这两个关乎到版本升级问题,理论上,XP是不允许用户安装两个相同Product Code的同一个软件的,即时,每一个版本的安装包,都必须有新的Product Code。但其实,很多时候,我们在项目的时候,并不是每一次release都是一个新版本,因为有可能只是更改了一点点,不足以作为一个新版本,这是我们可以称为是一个小版本,比如,V1.0.0-》V1.0.1。我查了一下帮助文档,找到了”Chaning the Product Code”这篇文章,里面开头有这么一句:An update that meets the following guidelines generally does not require a change of the product code and can be handled as a small update, or if the version is to change, as a minor upgrade。(详细请按F1,官方文档才是王道)
这句话的意思是,当update属于 small update 或者 minor upgrade的时候,就不用更改product code,这两者的区别在于,minor upgrade更改了 product version。除了这两个之外,剩下的一个就是major upgrade,生成这种安装包的时候,就需要更改product code 和 producr version。(还是不明白的请看官方帮助文档)
另外,还有个叫做 package code的东西,当你每次release一个新的安装包的时候,无论是上面哪一个,这个package code都会改变,这是IS给安装包自动重新生成的。不用用户区设置。这是作为每个release包的唯一区别。
总的来说:当你生成一个大版本,如V1.0.0->V2.0.0,这是就需要换Product Code了(方法:General Information -> Product Properties->Product Code, 选中它, 左下方有个Generate GUID的按钮,点击它就可以重新生成,记得与Media->Release->PROJECT_ASSISTANT中的Product Code保持一致,否则在卸载的时候会出现问题),否则就不用更改。
    当小版本实现覆盖安装的时候,记得还要在Media->Upgrades->Update Windows Installer Setup中,common下选中prompt,这样,当你覆盖安装的时候,系统就会提示你是否要覆盖安装,否则则会提示你,已经安装了 某个Product Code 的产品,不让覆盖安装。

去掉安装界面还有卸载界面上面的”InstallShield Wizard”等字眼。

General Information -> String Tables
选中你采用的那个语言。在“Value”列中,将”InstallShield Wizard”这些字眼全部替换掉空格或者其它信息,自己决定。(注意:安装还有卸载的时候,进入的第一个界面还有最后退出的界面的”InstallShield Wizard”是去不掉的,因为去掉这些字眼本来就违反了IS的协议,你用别人的东西,肯定要标记一下别人公司的标志)

2. 点击 Organization
设置Feature(组件)的安装类型

在制作简单的安装软件的过程中,已经提到过类型安装:Minimal,Custom,Typical .
选择 Setup Types, 你会发现无论点击这三个中的任何一个,DefaultFeature都是必选的。

3. 点击 Application Data
如何添加我要打包的文件到工程中

选择Files and Folders,点击右边的***[INSTALLDIR]这个文件夹,然后在“Source compuoter’s floders”选中你要加入的文件夹,右边的“Source computer’s files”框栏中就显示这些文件,把这些直接拉到“Destination computer’s files”中。(注意:如果发现拉入的文件不对,想要删除,则不能在这里删除,而要到Organization->Components下把文件删除,这样才能删的彻底,否则会出错。另外,加入好文件后,全选这些文件,右击打开属性,选择”Always Overwrite”,这样可以强制覆盖安装。)

4. 点击 System Configuration
如何建立桌面和开始程序的快捷方式

像上面图片一样,建完快捷方式后,记得把每个快捷方式的”Working Directory”设置为”[INSTALLDIR]”.否则会出错。

5. 点击 Behavior and Logic
怎么定制安装和卸载过程出现的界面

点击Install Script, IS 的installscript在安装的时候首先调用的是OnFirstUIBefore 函数,卸载的时候首先调用的是 OnMaintUIBefore 函数,这两个函数都在 Before Move Data. 而在安装结束时调用的函数是 OnFirstUIAfter 函数,而卸载结束的时候调用的是 OnMaintUIAfter.

如何在卸载的时候不弹出“修改”“修复”“删除”的界面,直接进入删除

在OnMaintUIBefore函数中,从Dlg_Start到Dlg_SdFeatureTree之间的代码全部注释,然后加上nType = REMOVEALL;

如何除去安装和卸载过程中标题中的“InstallShield Wizard”字眼

安装和卸载过程中,第一个出现的界面和最后退出的界面标题的字眼是无法去除的,或者说我不知道怎么去吧,哈…其它界面上的标题可以通过:在OnFirstUIBefore中添加:SetTitle(“安装”+IFX_PRODUCT_NAME,0,BACKGROUNDCAPTION); 卸载也是一个道理,添加以上语句的函数是:OnMaintUIBefore

怎么用脚本创建一个卸载快捷方式,如何“完美卸载”

IS自带的建立卸载快捷方式(Project A Assistant -> Application Shortcuts -> Create an uninstallation shortcut)是有问题的,会出现卸载不完全的现象。解决方法是写脚本:
Install Script -> After More Data -> OnFirstUIAfter 中添加:
STRING szFile;
NUMBER nResult;

szFile = UNINSTALL_STRING + “/UNINSTALL”;
nResult = StrFind(szFile,”.exe”);

if(nResult >= 0) then
StrSub(szMsg1, szFile, 0, nResult + 4);
StrSub(szMsg2, szFile, nResult + 4, 200);

LongPathToQuote(szMsg1, FALSE);
LongPathToQuote(szMsg2, FALSE);

szFile = “\” + szMsg1 + “\” + szMsg2;
        endif;
  
  AddFolderIcon(FOLDER_PROGRAMS ^ “AliProbe”, “Uninstall AliProbe”, szFile, WINDIR, WINDIR ^ “System32\\msiexec.exe”, 0, REPLACE);
   
  然后在OnMaintUIAfter()中添加:

// 删除开始所有程序中的AliProbe文件夹
  DeleteProgramFolder(“AliProbe”);
  
  // 删除桌面上的快捷方式
  STRING szItemName = “AliProbe”;
  STRING szProgramFolder = FOLDER_DESKTOP;
  DeleteFolderIcon(szProgramFolder, szItemName);
  
  // 删除安装目录文件夹
  DeleteProgramFolder(TARGETDIR);
  
? 向注册表写入安装路径

prototype AliprobeReg(); //声明函数
function AliprobeReg()   
number nRootKey,nType,nSize;
string szKey,szNumName,szNumValue,szClass;
begin     
  //修改注册表
  nRootKey = HKEY_LOCAL_MACHINE;
  RegDBSetDefaultRoot (nRootKey);     //置根为nRootKey 
  //注册子项
  szKey="SOFTWARE\\Aliprobe\\";
  if RegDBKeyExist(szKey) < 0 then    //不存在“SOFTWARE\\Aliprobe”,创建这个项
     RegDBCreateKeyEx(szKey,"");
  endif;
  //初始化每个键的公共值
  nType=REGDB_STRING;
  nSize=-1;
  //注册安装路径
  szNumName="PATH";
  szNumValue=TARGETDIR;
    RegDBSetKeyValueEx(szKey,szNumName,nType,szNumValue,nSize);
end;

在OnInstallFilesActionAfter()中调用上面的函数。

安装结束后启动进程和readme文件

在OnFirstUIAfter()中添加:
szMsg1 = "AliProbe已经安装完成";
    szMsg2 = "";
 bOpt1  = TRUE;
 bOpt2  = TRUE;
 szOption1 = "打开readme文件";
// szOption2 = "启动Aliprobe";     
 szOption2 = "";
 nResult = SdFinish(szTitle, szMsg1, szMsg2, szOption1, szOption2, bOpt1, bOpt2);   
 
 if(bOpt1) then    
     if(FindFile(TARGETDIR, "readme.txt", szFile) = 0) then
      LaunchApp(WINDIR^"Notepad.exe", TARGETDIR^"readme.txt");
     endif;
    endif;
    
    if(bOpt2) then
     if(FindFile(TARGETDIR, "AliProbe.exe", szFile) = 0) then
      LaunchApp(TARGETDIR^"AliProbe.exe", "");
     endif;      
    endif;

6. 点击 Media
对于小版本,提示覆盖安装

当小版本更新的时候,由于Product Code没有更改,所以,必须设置让它提示升级安装。选择Upgrades -> Upgrade Window Installer Setup ,选择Common ,勾上 prompt

如何更改安装包的名字,不要默认的Setup.exe

Release -> PROJECT_ASSISTANT 
 
修改Setup file name就可以了。另外,Product Name 和 Product Version 也要做相应的修改,Product Code 和 Upgrade Code 要保持和 General Information -> Product Properties的Product Code 和 Upgrade Code 要保持一致,否则会出现卸载失败。

五.其它细节注意。
1. Cannot rename directory 或 Error Code = -1014

关闭工程release的目标文件夹,即**/**/../Disk,这个文件夹,此时很有可能因为它开着而导致错误。

又一打包工具介绍:Installshield 打包安装包心得相关推荐

  1. 几个常见的Android多渠道打包工具介绍

    Android项目开发完,多途径打包是必不可少的环节.其原理在于,通过在Android安卓包中增加不同的标识,区别各个途径下载来源,用于计算App在不同使用市场或途径合作中的各项数据. 工欲善其事,必 ...

  2. 因路径乱码使InstallShield Wizard安装包打开“出现1155错误,文件xxx.msi未找到“的解决方式

    安装学校大物实验软件,该软件使用InstallShield打包,但我将安装包下载下来后打开无法正常运行.明明也已按教学视频所说安装了.Net Framework 3.5,还是出现错误. 我遇到的错误如 ...

  3. Installshield获取安装包版本的系统变量是IFX_PRODUCT_VERSION

    Installshield获取安装包版本的系统变量为IFX_PRODUCT_VERSION 当笔记记下来,很简单的一个变量,不过IS里查系统变量是让人头大,知道就是知道,不知道查起来查死人 转载于:h ...

  4. APK文件简介 及 解包 打包 工具 介绍

    1. APK文件简介 APK是Android Package的缩写,即Android application package文件或Android安装包.每个要安装到Android平台的应用都要被编译打 ...

  5. Installshield 打包安装包心得

     制作简单的安装软件 声明:下面的教程,是把读者当做完全没接触过IS的角度来制作的. 1. 启动InstallShield 12.建立一个InstallShield MSI Project,如图: 2 ...

  6. InnoSetup打包工具使用;C#打包工具;VB打包工具;EXE打包工具;C++打包工具

    打包工具InnoSetup使用 一.摘要 1.描述 2.关键字 二.什么是InnoSetup 三.什么时候需要使用InnoSetup 四.InnoSetup生成安装包效果图 五.InnoSetup使用 ...

  7. Installshield 12 安装包制作工具

    http://chorfung.blog.163.com/blog/static/1207120002010320104717707/ 一. 说明. 阅读对象:本人,IS的初学者. 适用版本:Inst ...

  8. linux打包工具deb,deb打包方法

    deb打包方法 发布时间:2009-11-15 17:57:27来源:红联作者:smqt 现在网上找到的全都是 checkinstall 原版的反而很难找到了,做一个备份,以免忘了 转自http:// ...

  9. android打包工具多渠道批量打包,android 二次打包完成apk多渠道打包的方法

    本文介绍将渠道号写入assets文件里面,通过解压apk修改assets里的文件,用Java代码生成jarsigner脚本并运行脚本二次打包的方式来获取新的渠道包 此打包方式一个渠道包只需要5秒左右, ...

  10. 安装包UI美化之路-打包过程中自动给安装包签名(防误报)

    总是有朋友反馈说,打包出来的程序会被360报毒! 嗯... 这是一个问题,360误报不是一天两天了. 原因及理论 被误报,一般是两个原因: 没添加代码签名 没有提交360认证(就是这么...) 问题即 ...

最新文章

  1. django 快速实现完整登录系统(cookie)
  2. python课堂笔记
  3. 【动态规划】大厅安排 (ssl 1212)
  4. fastdfs的tracker启动之后一直选举_jraft选举策略
  5. 【C语言进阶深度学习记录】三十一 数组作为函数参数时退化为指针
  6. Spring--quartz中cronExpression配置说明
  7. Windows系统利用5次shift维权漏洞复现
  8. 构建复杂的应用程序(二)—— visual studio 下 C/C++ 项目开发
  9. Linux Bash Shell字符串抽取、按列合并和格式化输出
  10. 常用的php类、方法、函数 注释标记
  11. 文件编程概念(C语言库函数系统调用API)
  12. vue项目前端页面模板,基于vue的前端模板
  13. 计算机怎么清理CAD,注册表cad,如何清理cad软件在注册表残留
  14. Unity通过压缩字体减小包体大小
  15. Modelsim添加中间变量
  16. 服务器主动向android手机端推送消息
  17. 软件设计师——Week 2
  18. 51951-04-3,Hydroxy-PEG2-CH2CO2H sodium salt羟基可以进一步衍生或替换为其他反应性官能团
  19. unity上传头像_Unity用户自定义圆角头像
  20. 核心微生物分析_中国白酒发酵过程中的核心微生物群及其与环境因子的关系-微生物学报.PDF...

热门文章

  1. Eplan2.7 安装教程
  2. 《原则》瑞达利欧_epub+mobi+azw3
  3. SQL Server 不允许保存更改的解决方法
  4. pbrt gamma
  5. DSP学习笔记——基于TMS320F28335
  6. installshield脚本入门
  7. xvidcore-1.3.2编译
  8. 计算机组成原理试题解析答案,计算机组成原理习题答案解析(蒋本珊)
  9. PASCAL VOC 2007数据集,百度云下载
  10. Open Language Tools:简介(1)