制作简单的安装软件

声明:下面的教程,是把读者当做完全没接触过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,这个文件夹,此时很有可能因为它开着而导致错误。

2、32位/64位打包注意事项见另外一篇文章

http://blog.csdn.net/yangbingzhou/article/details/49736119

Installshield 打包安装包心得的更多相关文章

  1. How to: Installshield做安装包时如何添加文件

    原文:How to: Installshield做安装包时如何添加文件 我一直以为这不是一个问题,可是没想到在几个群内,对于如何向安装包添加文件不解的大有人在,今日稍暇,整理成篇,以供参考 首先我想再 ...

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

    原文:Installshield获取安装包版本的系统变量是IFX_PRODUCT_VERSION Installshield获取安装包版本的系统变量为IFX_PRODUCT_VERSION 当笔记记下 ...

  3. 【海洋女神原创】How to: Installshield做安装包时如何添加文件

    我一直以为这不是一个问题,可是没想到在几个群内,对于如何向安装包添加文件不解的大有人在,今日稍暇,整理成篇,以供参考 首先我想再大声地说一遍:不要再跟我说英文看不懂了!!!!你做了程序员这一行,就得逼 ...

  4. vs 2017打包安装包(印象深刻)

    Visual Studio Install 打包安装项目2017 以下是具体步骤 一.安装环境 1.下载:链接地址 2.安装vs2017的时候需要安装依赖 .NET framework 4.6 .下载 ...

  5. WinForm使用Setuo Project打包安装包 (附带vs2019 InstallerProjects安装程序)

    vs2019 InstallerProjects安装程序地址: 链接:https://pan.baidu.com/s/1K5iDuQT4CBBw2dJjRLqhjg提取码:dfhy 转载至https: ...

  6. XCODE打包安装包步骤

    1. 2. 3. 4. 5. 6. 7. 导出之后就可以看到一个后缀为.ipa 的安装包.

  7. vs2010将写好的软件打包安装包经验

    (1) 用VS2010打开已经编写好准备做安装包的软件程序,右击解决方案,添加新建项目. (2) 在“新建项目”对话框中,选择“其他项目类型”,再选择“安装和部署”,然后在模板中选择“安装项目” (3 ...

  8. InstallShield Limited Edition for Visual Studio 2013 图文教程打包安装包

    http://www.wuleba.com/23892.html 从Visual Studio 2012开始,微软就把自家原来的安装与部署工具彻底废掉了,转而让大家去安装使用第三方的打包工具“Inst ...

  9. How to:installshield安装包怎样才能出现选择路径的界面?

    原文:How to:installshield安装包怎样才能出现选择路径的界面? 这个问题新手问的很多,installshield的安装包默认设置下选择路径的界面藏在Custom安装类型下.在做完安装 ...

随机推荐

  1. JS eval() 特殊用法

    最近项目有 有个模块 有若干功能菜单,这些菜单查询部分都是一样的,所以就像提取一个通用的查询页面然后使用$('#ele').load('../**.aspx #searchID', {}, funct ...

  2. [hdu 3376]Matrix Again

    这题就是真正的费用流了,用 大屁 就算不超时,你也有个 CE :数组 so large 拆点,费用取反,最大费用最大流即可了喵~ 不过似乎这题很不兼容 dijkstra 的样子 就算用 spfa 重赋 ...

  3. ecshop教程:重置后台密码MD5+salt

    ecshop密码加密方式: MD5 32位+salt,简单来说就是明文密码用MD5加密一次,然后在得到的MD5字符后边加上salt字段值(salt值为系统随机生成,生成以后不再改变)再进行一次MD5加 ...

  4. Unity3D研究院之获取摄像机的视口区域

    摄像机分为两种,一种是正交摄像机还有一种是透视摄像机.正交摄像机无论远近它的视口范围永远是固定的,但是透视摄像机是由原点向外扩散性发射,也就是距离越远它的视口区域也就越大.那么我们如何获取距离摄像机任 ...

  5. 数据库之mysql存储程序

    什么时候会用到存储过程 1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般 SQL 语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度2.当对数据库进行复杂操作时 ...

  6. Spring MVC 4.2 增加 CORS 支持 Cross-Origin

    基于XML的配置: <mvc:cors> <mvc:mapping path="/api/**" allowed-origins="http://dom ...

  7. excel表格中关于 撤销工作表保护密码

    利用宏处理,代码如下: Sub PasswordBreaker() Dim i As Integer, j As Integer, k As Integer Dim l As Integer, m A ...

  8. SilverlightERP&CRM源码(可用于开发基于Silverlight的CRM,OA,HR,进销存等)

    SilverlightERP系统源代码(支持创建OA.SilverlightCRM.HR.进销存.财务等系统之用) 可用于开发以下系统 SilverlightERP SilverlightCRM Si ...

  9. 【mysql】压缩myisam数据表

    myisam引擎介绍 存储结构: MyISAM每张表被存放在三个文件: frm:表格定义: MYD(MYData):数据文件: MYI(MYIndex):索引文件:   存储空间: MyISAM可被压 ...

  10. session与cookie的区别---

    session和cookie的最大区别在于session是保存在服务端的内存中, 而cookie保存与浏览器或客户端文件里面: session是基于访问的进程,记录了一个访问的开始到结束,当浏览器或进 ...