初次使用InstallShield笔记
公司的产品需要打包发布,以前一直没打包,打包方法的学习交给了我
下面的内容是我研究过后的,通过回忆写的笔记。由于不熟悉,可能会有错误或者是笨办法,希望高手指正,感激不尽。
有些东西是什么,以及是什么意思我也不太清楚,反正我照这么做是满足了我的需求。
需求如下
项目包含主程序和数据库文件两个部分,可以选择这两个部分安装在不同的地方
当文件都复制完之后将数据库文件的安装路径写进程序安装目录下的一个ini文件当中
工具选择
1. VS05自带的打包工具
一开始选择的这个工具,不过我太菜我确实不知道怎么让这个来满足我们的需求
2. InstallShield 2009 pro
随后想到了专业打包工具IS,下载了较新的版本试用。不过网上教程较少,软件功能强大,因此在慢慢摸索中。
步骤
1. 开始
网上说一般的打包工程选择Basic MSI Project,如果需要对界面需要进行很高的定制就需要选择InstallScript MSI Project。
由于我只需要打包,已经执行部分脚本因此我选择了Basic MSI Project。输入Project Name,选择Location后点击OK,新建工程。
进入到下图界面,此时我们可以选择两种打包方式(红框处选择)
1.Project Assistant 可以进行简单的类似向导类的配置即可进行打包工作,如果选择这种方式,Visual Studio自带的工具也能轻松实现
2.Installation Designer 完全自由化的配置,自我定制程度最高。
根据需求情况,我自然选择第二种方式
2.配置
点选Installation Designer,进入如下界面
红框处就是需要选择配置的区域了。
2.1 General Information
在Installation Information中选择General Information,在这里配置软件的基本信息
红线处你可以写上你的大名,你是这个Project的作者
下面的Setup Langueages可以选择安装语言,我这里只考虑了简体中文,故未更改设置。
红框里填写上你公司的名字和网址,我举个例子才写的这两个
在Product Properties中填入软件的信息,软件的名字、版本什么的。
INSTALLDIR是指安装目录,图中的配置方法默认是指这个路径: C:\Program Files\Transformers\Demo
2.2 Files
右边的区域被分成了四块,上面两块是本地计算机,下面两块是目标计算机
总的思路跟资源管理一样,这里你就可以按照你自己的思路来定制了
举个列子,我随便找点东西打包
在Destination computer’s folders中把树展开,选中Demo[INSTALLDIR],这是什么东西相信看看就明白了,如果不明白的话那就需要再学习下基础知识了。
从Source computer‘s files(本地计算机)中拖动一些文件到Destination computer’s files中,就会弹出如下提示
你需要创建一个Feature,什么是Feature我不太清楚,我把它理解成一个文件的集合。输入名字,我输入的是Main,点击OK
(如果你看不到上图中左边红框内的东西,就在那里的树状结构任意节点点击右键,勾选Show Components就能看到了)
当你把你想打包的东西添加进入过后,一个最基本的包就打好了,已经可以编译执行尝试安装了。
工具栏上的图标编译跟执行跟VC++6.0的图标是一样的吧,第三个红圈就是卸载
当然只做到这一步是不能满足我的需求的,我还需要添加一个数据库文件夹,在Demo[INSTALLDIR]上点击右键——选择New Folder——命名为Database
进行图中操作
直接点击下一步,到第二步,按图中操作
再下一步,将数据库相关文件都添加进去,当然你可以先添加一个文件(夹)进去,其余的在“Files and Folders”中继续添加。
至此,数据库文件也添加到了安装包内,不过默认的安装流程中只有选择主程序的安装路径没有选择数据库的路径,因此需要手动添加。
方法见2.3
2.3 Sequences
大家应该都安装过软件,最菜的人也知道一路点击“下一步”来安装程序。这部分就讲一下如何定制安装的顺序,就是“上一步”与“下一步”的跳转。
最左边选择Custom Actions and Sequences后,在中间的树中如图操作,User Interface上点击右键——Insert…
点击OK后Sequences树中多了个DatabaseFolder,可以拖动他到想要的位置。
当然Sequences的编辑还没那么简单,貌似通过拖动无法实现,需要对每个窗体进行编辑。
如图所示,图中的意思就是在选择DatabaseFolder的路径的对话框中,点击“上一步”按钮会跳转到CustomerInformation这个对话框中
就是这样编辑,工作量也不小,或者是有其他什么简便方法,可是我不知道
2.4 动态修改XML或者INI文件
在这个项目中,我需要将项目的安装路径写在安装目录下的一个ini文件中,这个ini文件是需要打包在项目中的。
首先确保ini文件已经添加进入打包工程。
在INI File Changes中新建一个与欲改写的ini文件同名的ini文件——my.ini
在my.ini文件下建立欲改写的section(我的例子是installdir)以及keyword(例子中是dir),编辑keword
在Data Value中写入系统变量[INSTALLDIR],这个就表示程序的安装目录。如果要获取数据库的安装目录就可以写入[DATABASEDIR]
XML的修改跟这个类似,相信都可以融会贯通。
在我的实际项目中,遇到个问题。
my.ini是mysql要用到的东西,是放在数据库目录中的,安装上面的方法略加修改就可以实现。
但是mysql需要的路径类似于C:/MyDataBase/MySql/
而通过我上面方法[DATABASEDIR]获得的路径是Windows标准的 C:\MyDataBase\MySql\
因此我必须要把这个斜线给反过来,我不知道怎么反。只知道可能通过脚本来修改(如果有高人知道简便方法,请指点)
脚本见2.5
2.5 InstallScript
刚刚接触,我连在哪里写脚本都不知道,跟别说如何写脚本了,虽然我现在也不会写脚本~~(求教啊)
虽然还不会写脚本,还是先把在哪里写以及如何运行脚本写出来,希望有跟我有同样问题的朋友看到。
然后出现下图
右边是编辑区,用于写脚本。有编程经验的话这个不难理解
脚本的执行回到Custom Actions and Sequences,在中间的列表中的Custom Actions上点击右键,选择Custom Actions Wizard
在Action Type中选择Run InstallScript code,在Insert into Sequence中的Install Execute Sequence处选择何时执行,其余按向导提示操作。
#include "ifx.h"
export prototype ProcessAfterDataMove(HWND);
export prototype STRING ReplaceStr(STRING);
export prototype RunBat(STRING);
function ProcessAfterDataMove(hMSI)
STRING P_Dir,DB_Dir; // P_Dir是主程序目录下ini文件的路径,DB_Dir是数据库的路径
begin
P_Dir = TARGETDIR + "temp.ini"; //TARGETDIR是系统变量,存放安装路径
//GetProfString()函数是系统函数,用于读取ini文件中的信息
//第一个参数指定文件所在路径
//第二个参数指定section名
//第三个参数指定keyword名
//最后一个参数用于 返回 前面指定的keyword的值。注意:是返回!
GetProfString (P_Dir, "temp", "dir", DB_Dir);
//ReplaceProfString()函数是系统函数,用于修改ini文件中keyword的值
//第一个参数指定文件所在路径
//第二个参数指定section名
//第三个参数指定keyword名
//第四个参数指定keyword原值
//第五个参数指定keyword的新值
//只有前面4个条件完全匹配时,原值才会被第五个参数中的新值替换
ReplaceProfString (DB_Dir + "my.ini", "mysqld", "basedir", "\"" + DB_Dir + "\"", "\"" + ReplaceStr(DB_Dir) + "\"");
ReplaceProfString (DB_Dir + "my.ini", "mysqld", "datadir", "\"" + DB_Dir + "Data\"", "\"" + ReplaceStr(DB_Dir + "Data") + "\"");
//执行批处理
RunBat(DB_Dir);
end;
function STRING ReplaceStr(Str)
LIST StrList;
STRING temp,path;
begin
//创建List存放Tokens
StrList = ListCreate(STRINGLIST);
//分解出Token存入List
StrGetTokens( StrList, Str, "\\");
//取出TokenList的头节点
ListGetFirstString(StrList, temp);
//头节点后加入 “/”
path = temp + "/";
//循环 取出所有的节点 后面加入“/”
while(ListGetNextString(StrList, temp) = 0)
path = path + temp + "/";
endwhile;
return path;
end;
function RunBat(DB_Dir) //执行批处理
STRING dir;
begin
dir = DB_Dir + "bin\\exec.bat" ;
//调用其他程序
//第一个参数是调用程序的位置
//第二个参数是调用程序运行所需参数
//WAIT表示等到执行完毕这个程序,安装再继续进行
LaunchAppAndWait(dir, "",WAIT);
end;
|
初次使用InstallShield笔记的更多相关文章
- 初次接触Service笔记
Service是后台的运行的小程序,分两种一种是StarService()另外一种是bindService(),这种可调用Service中的方法和返回结果等操作而StarService不能 他的生命周 ...
- 【Spark】【RDD】初次学习RDD 笔记 汇总
RDD Author:萌狼蓝天 [哔哩哔哩]萌狼蓝天 [博客]https://mllt.cc [博客园]萌狼蓝天 - 博客园 [微信公众号]mllt9920 [学习交流QQ群]238948804 目录 ...
- Leetcode 5. Longest Palindromic Substring(最长回文子串, Manacher算法)
Leetcode 5. Longest Palindromic Substring(最长回文子串, Manacher算法) Given a string s, find the longest pal ...
- 【译】SQ3R学习法则
SQ3R 观察-提问-阅读-复述-回顾 背景 SQ3R是一种理解策略,可帮助学生在阅读时思考他们正在阅读的文章. SQ3R通常被归类为学习策略,通过教导学生在初次阅读一篇文章时如何阅读和像高效读者一样 ...
- 20145330《Java学习笔记》第一章课后练习8知识总结以及IDEA初次尝试
20145330<Java学习笔记>第一章课后练习8知识总结以及IDEA初次尝试 题目: 如果C:\workspace\Hello\src中有Main.java如下: package cc ...
- Spring Cloud学习笔记--Spring Boot初次搭建
1. Spring Boot简介 初次接触Spring的时候,我感觉这是一个很难接触的框架,因为其庞杂的配置文件,我最不喜欢的就是xml文件,这种文件的可读性很不好.所以很久以来我的Spring学习都 ...
- InstallShield 脚本语言学习笔记
InstallShield脚本语言是类似C语言,利用InstallShield的向导或模板都可以生成基本的脚本程序框架,可以在此基础上按自己的意愿进行修改和添加. 一.基本语法规则 ...
- Django笔记-MySQL初次使用设置
以下为个人学习时的笔记,正在完善中........... [1]启动服务 [root@bogon /]# service mysqld start正在启动 mysqld: [确定] [root@bog ...
- 初次使用Docker的体验笔记
一.前言 Docker容器已经发布许久,但作为一名程序员如今才开始接触,实在是罪过-- 在此之前,我还没有对Docker进行过深入的了解,对它的认识仍停留在:这是一种新型的虚拟机.这样的 ...
随机推荐
- 【java开发系列】—— spring简单入门示例
1 JDK安装 2 Struts2简单入门示例 前言 作为入门级的记录帖,没有过多的技术含量,简单的搭建配置框架而已.这次讲到spring,这个应该是SSH中的重量级框架,它主要包含两个内容:控制反转 ...
- K近邻分类算法实现 in Python
K近邻(KNN):分类算法 * KNN是non-parametric分类器(不做分布形式的假设,直接从数据估计概率密度),是memory-based learning. * KNN不适用于高维数据(c ...
- linux挂载移动硬盘
1. 安装ntfs-3g2. mkdir /mnt/disk3. mount -t ntfs-3g /dev/sdb /mnt/disk4.卸载 umount /dev/sdb
- 在xcode运行编译时,编译成功,但项目中显示缺少该文件,这是只要关闭重启xcode即可。
在xcode运行编译时,编译成功,但项目中显示缺少该文件,这是只要关闭重启xcode即可.
- jsp:中文乱码解决
说明:request乱码指的是:浏览器向服务器发送的请求参数中包含中文字符,服务器获取到的请求参数的值是乱码: response乱码指的是:服务器向浏览器发送的数据包含中文字符,浏览器中显示的是乱码: ...
- 本地json文件的编辑器,node-webkit开发的exe程序
首发:个人博客,更新&纠错&回复 在昨天的dota契合度计算器中,用到了dota英雄数据和dota玩家数据这两个数据库,为了便于网页应用使用,这两个数据库的存储格式是json,即her ...
- :nth-child
匹配其父元素下的第N个子或奇偶元素 :eq(index) 匹配选择器指定序列的元素,而这个将为每一个父元素匹配子元素. :nth-child从1开始的,而:eq()是从0算起的!可以使用:<br ...
- Master page and jquery
1.download latest jqury http://jquery.com/download/ 2.download latest jquery.ui, Theme select " ...
- Docker 容器中“TERM environment variable not set.”问题解决
在查容器内部资源利用情况时候,发现top命令无法使用,报错“TERM environment variable not set.”.从网上找到了解决方案,如下. [root@localhost ~]# ...
- Codeforces 749D:Leaving Auction(set+二分)
http://codeforces.com/contest/749/problem/D 题意:有几个人在拍卖场竞价,一共有n次喊价,有q个询问,每一个询问有一个num,接下来num个人从这次拍卖中除去 ...