最新消息:因从typecho切换到wordpress, 由于转换导入问题,文章可能存在部分乱码或者排版问题,逐个排查修复中...

自动部署:挖出 msi 安装包静默安装参数

工作相关 admin 4938浏览 0评论

背景:公司1时,新装一台电脑,系统安装完毕后,接着是使用批处理来进行软件的安装的。安装到金山词霸时,期间需要输入产品注册用的序列号以及需要点击多次的“下一步”,最后还有一堆添加收藏夹,设置为首页的选项,默认是勾选的,需要去除。本人追求的是自动部署,无人干预最好了。不行的话也要尽量少干预。

下面的文章原创发表在霏凡论坛。现转到此处。
原标题为:应用区原创约稿-软件的自动化安装
发表时间:2008-04-30

以下是原文:

引言

记得自己曾经发过一个求助的帖子,就是关于自动输入安装软件的序列号的。缘由是这样的,公司有一自动安装软件的脚本,但是还不够智能化,执行到安装金山词霸时,得手工点击下一步,输入一下用户和公司信息,序列号,安装目录等等,其它倒好,其中就是序列号比较麻烦,每次都得手工输入,还得留意不要输错,个人感觉比较繁琐。因为我们都曾经下载过Office或者其它软件,安装的时候序列号自动输好了的,省去了记忆和查找序列号的麻烦。于是当时带着求助的意思征集了一下办法,标题我记得大概是含有“挑战你的思维系列”,除了想解决我当时的问题,更大程序上我的意思是要引发大家的交流热情。等了N久,当时有一个霏友采用了Orca重新编译MSI安装包的办法算是我得到的最好的办法了。但是我却发现有一个问题,重新打包后的MSI安装界面上显示有乱码了。在工作当中,随着自己更深入一步了解MSI安装包,如今要实现自动静默安装MSI安装包已经不是什么难事了。

正文

一、先来简单了解一下微软的MSI安装包和Windows Installer

提起MSI安装程序,还是得多少了解一下Windows Installer。也许你已经注意到在系统的服务里面有Windows Installer这样一个服务。它其实就是用于管理软件的安装、管理软件组件的添加和删除、监视文件的复原以及使用回滚技术维护基本的灾难恢复。另一方面你也可以把MSI文件看作是数据库,里面包含安装软件所需要的数据,比如安装序列号、目标文件夹路径、系统依赖项、安装选项和控制安装过程的属性等等。
因此,实际上MSI安装包在你双击执行安装的时候,实际上它是由系统服务Windows Installer中涉及的msiexec.exe去调用MSI安装数据库。然后执行一系列安装参数的设定。
(更多关于MSI安装包和Windows Installer的信息,请网络搜索,这里不再赘述)

二、msiexec.exe 的参数

详细的参数说明可以自行在命令行下面键入 msiexec.exe /? 查询了解。
下面我从安装参数、显示参数、其它参数中挑几个主要的做下简单说明:
1)msiexec /i Product.msi
Product.msi 是实际安装的文件名(可以带上路径,支持UNC路径)
如: msiexec /i D:SetupPowerWord2005.msi
注:路径名中的文件夹请尽量使用不带空格的文件夹。如果确实是带空格名的,也没关系,那就必须使用双引号了(英文输入状态下的引号)。
如: msiexec /i D:setup”Powerword 2005.msi”
或者用 msiexec /i “D:setupPowerword 2005.msi”
我推荐使用后者,即用双引号将整个路径和文件名引起来,而不是单独地引号其中带空格的文件夹。至于为什么,我会在以后发的原创文章中有所体现。请关注。
2)/qn /qb / qr /qf
设置用户界面级别

    /qn - 无用户界面 
    /qb - 基本界面 
    /qr - 精简界面 
    /qf - 完整界面(默认值) 
msi-1.jpg
msi-2.jpg
msi-3.jpg
msi-4.jpg
msi-5.jpg
msi-6.jpg
msi-7.jpg
msi-8.jpg
msi-9.jpg

如使用参数 msiexec /i Product.msi /qb
安装的话,就只会弹出基本界面(一般就是单独的进度条)如下图:

3)其它参数
有的软件安装完毕后需要重启才能使用。但有时候我们不一定需要马上重启,因此可以加上
/norestart 参数,使之安装完成后不重新启动。当然也有必须马上重启的情况,加的就是/forcerestart 。更为人性化的就是加上 /promptrestart 即提示用户是否现在重新启动。
三、实例
这里就以金山词霸2005为例来说明MSI安装包的自动安装参数的实现。
先来看一下手工操作需要经历的各个界面。







下面先直接给出批处理安装脚本,将它直接保存为.bat批处理文件,直接双击就可以调用金山词霸实现静默安装了。整个过程无需手工点击下一步等等动作。

msiexec.exe /i "D:\PowerWord\Powerword2005.msi"  USERNAME=Aspirer COMPANYNAME=BBS.CRSKY.COM ISX_SERIALNUM=J888Y-XXXXX-36YTP-9JQMG-XXXXX OPTIONS_ASSISTANT=0 OPTIONS_STARTPAGE=0 OPTIONS_FAVORITES_JOYO=0 OPTIONS_SHORTCUT_STARTUP=0 OPTIONS_SHORTCUT_DESKTOP=0 OPTIONS_FAVORITES_CIBA=0 OPTIONS_FAVORITES_KINGSOFT=0 OPTIONS_SHORTCUT_QUICKLAUNCH=0 /qb

下面关键的,大家一定比较关心,如何知道比如Username,ISX_SERIALNUM这样的参数呢?

msi-a.jpg

这里提供2种办法
1.利用上面我有意没有提到的/l 日志参数。
比如可以使用msiexec /I Prodcut.msi /log D:installlog.txt
安装时手工填写一些信息,比如选择我同意软件许可协议等等。手工安装一遍下来就会生成一个日志文件。打开这个日志文件,通过搜索,你就可以快速定位到你所需要的参数。比如我在安装界面上设置了“用户姓名”是Aspirer,而“单位”是BBS.CRSKY.COM,那么我就可以直接搜索Aspirer和BBS.CRSKY.COM,这时候就可能马上定位到,如图。等于号前面的COMPUTERNAME,USERNAME,ISX_SERIALNUM等就是我们所需要的参数啦。其它参数也可在该日志文件中找到,这里不一一细说了。

msi-b.jpg

2.利用微软的工具Orca
下载地下:http://www.crsky.com/soft/8680.html
用Orca打开Powerword2005.msi,

在左边列出的表中找到Control,然后在右边的Property列中找到你所需要的参数即可。(这些USERNAME,COMPANYNAME,ISX_SERIALNUM参数好比是编程中事先定义好的变量名。)

msi-c.jpg

那些是否设置快捷方式,是否加金山词霸为首页之类的,而在表CheckBox中可以找到。和编程语言相似,一般参数值为1表示复选框为选中状态。

于是乎,再回顾一下我一开始给出的自动安装参数是不是很简单了?

msiexec.exe /i "D:\PowerWord\Powerword2005.msi"  USERNAME=Aspirer COMPANYNAME=BBS.CRSKY.COM ISX_SERIALNUM=J888Y-XXXXX-36YTP-9JQMG-XXXXX OPTIONS_ASSISTANT=0 OPTIONS_STARTPAGE=0 OPTIONS_FAVORITES_JOYO=0 OPTIONS_SHORTCUT_STARTUP=0 OPTIONS_SHORTCUT_DESKTOP=0 OPTIONS_FAVORITES_CIBA=0 OPTIONS_FAVORITES_KINGSOFT=0 OPTIONS_SHORTCUT_QUICKLAUNCH=0 /qb

顺带说明一下,我引言中提到的以前一FY使用的办法,就是用Orca编辑上面图中的ISX_SERIALNUM对应的后面的几个????成为实际应该使用的序列号,然后保存一下这个MSI文件,这样就可以直无需输入序列号啦~,现在网上的一些ISO光盘如Office安装盘,里面安装时就是无需手工安装的了。很大可能就是因为修改了MSI安装包。不过我记得当时我如此操作之后保存出来的MSI安装包再使用时界面上均为乱码了。

后续
既然MSI安装包可以实现静默+自动安装,它的好处是显而易见的,在微软的软件分发系统(SMS),还有如Novell的NAL(Novell Application Launcher)等等,对MSI格式的尤为支持。可是软件市面上却不见得都是这种打包好的安装包,那么如何改造其它的软件安装格式(最常见的就是exe了)成为MSI格式呢?如果不出意外,我将在下一篇原创文章和大家分享。

转载请注明:Linc Hu » 自动部署:挖出 msi 安装包静默安装参数

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址