在本书第2章,第6小节

在介绍InstallRite应用的时候,是以KV2005为例。

在使用InstallRite重打包kv2005时,如果打包后的KV2005用在不同配置的机器上,会反复重启动。对于这样软件,可以制作autoit的脚本。

附:autoit的使用方法

 

AutoIt软件的使用方法

在使用组策略分发软件的时候,或者通过文件夹共享安装软件的时候,有的软件可以自动安装完成,有的软件可以使用install Rite重新打包后也能自动安装完成。这两种操作都不需要用户有太多的参与。但还有一些软件,不能使用install Rite重新打包(如KV2006、驱动程序等),如果单位中用户操作计算机的水平不高,不能自己安装软件,那这种情况下,只能由网管或熟悉计算机的人来安装软件了。

那么,如果想解放网管、减轻网管的负担,对于一些这种操作,就没有办法了吗?我们可以使用AutoIt这个软件、通过制作脚本的方法,实现“全自动化”的安装软件。

AutoIt 是一种自动控制工具。它可以被用来自动完成任何基于 Windows DOS 的简单任务。它最初被设计用来自动完成安装那些其它方法不能自动安装的软件。尽管有一些程序如Office等具有自动安装的功能,可还有太多的程序不具备自动安装的功能。那就是用到 AutoIt 的地方。AutoIt 也可以被用来在你的机器上完成简单的任务。

AutoIt 运行时读取一个指定的脚本文件。这个脚本文件使得 AutoIt 完成一系列操作,包括:

执行程序(Windows 应用程序、DOS 命令等等。)

发出按键和鼠标点击(所有字符,不受键盘布局约束)。

窗口操作(例如最小化、隐藏、恢复、等待、激活,同样适用于Windows98/2000/XP/2003)。

简单剪贴板文本操作。

AutoIt是一款共享软件,没有任何使用上的限制。AutoIt是通过制作“脚本”的方法,由AutoIt运行脚本来实现相应的功能。就像原来DOS中的批处理、Word中的“宏”一样,它只是按照人们事先制定的脚本、来实现相应的功能。例如,我们有下列的几种操作,可以用AutoIt的脚本来实现:

Windows Server 2003中,需要用户登录后,先禁用“路由和远程访问服务”,然后再启用“路由和远程访问服务”并且对里面进行重新设定,设定之后,再关闭“路由和远程访问服务”的管理窗口。

软件安装,如果我们安装KV2006,需要接受许可协议、输入产品安装序列号、之后配置KV2006

对于管理员来说,打开管理工作站后,需要登录服务器(如使用“远程桌面”登录服务器,需要输入服务器的地址、用户名、密码等)

对于以上这些操作,我们都可以制作相应的脚本,并且把脚本编译成可执行程序,运行编辑后的可执行程序,可以在其他类似的计算机上进行相应的操作。

从这些可以看出,使用AutoIt制做安装程序,只是它的“一小部分”功能。在此,我们介绍AutoIt的使用方法。

AutoIt的安装非常简单,只要按照默认值即可以安装成功。在AutoIt中有非常详细的使用说明,下面我们通过制作KV2006安装程序的脚本,介绍autoit的使用方法。

首先我们来看图1-262,里面包括了KV2006的安装程序(setup.exe)、为安装KV2006编辑的安装脚本(kv.au3)、已经用AutoIt编译好的安装脚本执行程序(kv.exe,在运行的时候不需要AutoIt程序和kv.au3文件),其中kv.au3已经用“记事本”程序打开,里面是安装脚本的全部内容,如图1-262所示。

1-262 制作好的脚本

首先看第一行【run(".\setup.exe")】,表示要运行的程序。其中,【.\】为当前目录(因为安装软件的时候,脚本通常和安装程序在同一文件夹,并且使用当前目录可以在网络环境中分发,这是一个很好的使用“相对路径”的例子),【setup.exe】为将要运行的程序名称,在此,KV2006的安装程序是setup.exe

如果制作的脚本是运行其他的程序,请在此替换为其他程序的名称。

第二行【WinWaitActive("江民杀毒软件KV2006","首创全球领先的BOOTSCAN杀毒技术")】为等待一个窗口出现,窗口的标题名称为“江民杀毒软件KV2006并且窗口中有“首创全球领先的BOOTSCAN杀毒技术”字符。

第三行【Send("{ENTER}")】为发送回车键,相应于按下回车键。

在以后的脚本中,都是重复第二、第三行,只是等待出现的窗口不同、发送的按键不同罢了,其意义是一样的。

下面我们来看一下,怎样制做这个脚本。

首先用记事本新建一个文本文件,并保存为kv.au3,首先编辑第一行【run(".\setup.exe")】。

然后从“AutoIt v3中运行“AutoIt Window Info”程序,如图1-263所示。

1-263 窗口信息程序

然后按“CTRL+ALT+F”热键,暂停“AutoIt Window Info”程序的运行,之后运行KV2006的安装程序,以记录相关的信息。在记录信息的过程中需要注意:

等待安装界面处于静止等待状态(即处于等待按键或单击鼠标或者按热键继续的时候)时,按“CTRL+ALT+F”热键,“AutoIt Window Info”程序将显示当前窗口信息,此时记录当前窗口的标题和里面的关键内容(不同于其他窗口的内容,即关键字)

如图1-264所示,当安装程序进行第一个等待界面时,按“CTRL+ALT+F”热键,“AutoIt Window Info”窗口将会自动捕获当前活动窗口信息,把鼠标移动到有按钮的窗口上去,然后按“CTRL+ALT+F”,暂停新的捕获,此时可以记录第一个窗口的信息,如图1-264所示。

1-264 第一个等待窗口

此时,我们可以将第一个活动窗口的标题(江民杀毒软件KV2006,文中的【Title:    江民杀毒软件KV2006】显示)和里面的关键字(如下面的【首创全球领先的BOOTSCAN杀毒技术】)写在脚本的第二行WinWaitActive函数的里面,即:

WinWaitActive("江民杀毒软件KV2006","首创全球领先的BOOTSCAN杀毒技术")

注意,脚本中所有的标点符号都要为英文字符,不能使用中文字符代替。

在出现这一界面后,按回车键进入下一界面,则相应的AutoIt脚本为

Send("{ENTER}")

这一行的意思,就相当于在系统中按下回车键,关于其他按键,将在下面介绍。

后面的两个安装界面,与此类似。

而在输入序列号界面,如图1-265所示。

1-265 输入序列号界面

此时,先输入序列号试一下。在输入安装序列号的过程中,不需要按“TAB”键到一下输入栏。输入序列号完成后,按回车键进入下一界面,则相应的脚本如下

WinWaitActive("江民杀毒软件KV2006","使用序列号")

Send("kcxx348xx5jb7nj803yfmxxxt")

Send”的后面,即为产品的安装序列号。假设有其他的安装程序,如果在输入序列号的时候,在输入一组后需要按TAB键到下一组,则相应为

Send("kcxx3{TAB}48xx5{TAB}jb7nj{TAB}803yf{TAB}mxxxt")

后面的安装脚本,也这样编辑。

使用AutoIt的过程中,需要注意:

对于KV2006这类主要靠鼠标进行控制的安装程序,在制作脚本有,只能是使用TAB、空格、回车键等先进行安装,并记录下来。而如果有一写快捷键的安装程序,是很容易编写脚本的。例如Acdsee 8的安装程序,如图1-266所示。

1-266 Acdsee 8安装程序

它的下一个界面的热键是Alt+N,则这一界面的脚本编写如下:

WinWaitActive("ACDSee 8 - InstallShield Wizard"," WARNING: This program")

Send("!n")

使用AutoIt制作脚本时,要考虑到多个方面。如上面制作的脚本只是用于第一次安装的KV2006的情况,如果系统中已经安装了KV2004KV2005,则在运行安装程序的时候,会出现卸载以前版本的程序的界面;如果系统中已经安装了KV2006,则会出现修复的界面。对于这种情况,有两个办法解决,一是另外制作“KV2006卸载程序”和“KV2006修复程序”的脚本,并让用户选择(如果用户安装过KV2006以前的版本,请运行“KV2006卸载程序”;如果原来安装过KV2006,则运行“KV2006修复程序”)。另外的方法是制作带条件判断和转向的脚本以适应多种情况。

下面是制作好的KV2006安装脚本(带卸载功能),内容如下:

run(".\setup.exe")

WinWaitActive("江民杀毒软件KV2006","正在准备安装江民杀毒软件")

Sleep(15000)

$i=0

do

Sleep(1000)

if  WinActive("setup","确定") then

WinWaitActive("setup","安装程序发现江民杀毒软件")

WinActivate("setup","安装程序发现江民杀毒软件")

Send("{ENTER}")

WinWaitActive("UnInstall","是否要卸载江民杀毒软件")

WinActivate("UnInstall","是否要卸载江民杀毒软件")

Send("{ENTER}")

WinWaitActive("江民杀毒软件KV2006卸载程序","卸载完成")

WinActivate("江民杀毒软件KV2006卸载程序","卸载完成")

Send("{ENTER}")

$i=1

ExitLoop

endif

Sleep(1000)

if  WinActive("江民杀毒软件KV2006","首创全球领先的BOOTSCAN杀毒技术") then

WinWaitActive("江民杀毒软件KV2006","首创全球领先的BOOTSCAN杀毒技术")

WinActivate("江民杀毒软件KV2006","首创全球领先的BOOTSCAN杀毒技术")

Send("{ENTER}")

WinWaitActive("江民杀毒软件KV2006","在运行安装程序前退出其它Windows程序")

WinActivate("江民杀毒软件KV2006","在运行安装程序前退出其它Windows程序")

Send("{ENTER}")

WinWaitActive("江民杀毒软件KV2006","最终用户软件许可协议")

WinActivate("江民杀毒软件KV2006","最终用户软件许可协议")

Send("{ENTER}")

WinWaitActive("江民杀毒软件KV2006","使用序列号")

WinActivate("江民杀毒软件KV2006","使用序列号")

Send("kcxx348xx5jb7nj803yfmxxxt")

Send("{ENTER}")

WinWaitActive("江民杀毒软件KV2006","安装")

WinActivate("江民杀毒软件KV2006","安装")

Send("{ENTER}")

WinWaitActive("江民杀毒软件KV2006","准备复制")

WinActivate("江民杀毒软件KV2006","准备复制")

Send("{ENTER}")

WinWaitActive("江民杀毒软件KV2006","安装成功")

WinActivate("江民杀毒软件KV2006","安装成功")

Send("{SPACE}")

$i=1

ExitLoop

endif

Until $i=1

【说明】在这个脚本中,我们使用了“WinActivate”命令,用来在等待指定的窗口出现后,然后“激活”此指定的窗口,这样在正式使用时,不会出现问题(如运行了autoit脚本的安装程序,又运行了其他程序,后运行的程序“覆盖”了autoit脚本的程序,则autoit脚本的程序将不会继续)

下面我们介绍没有学到的命令。

do …… Until 循环语句,在不符合Until后面的条件时,一直执行循环体内的语句。在本节中,跳出“do …… Until”的条件是在两个分支中修改了变量“$i”的值。

if …… Then …… EndIf”,表示如果条件为真则执行ThenEndif之中的语句。

WinActive,如果指定的对话框出现,则返回值为1,否则为0

Sleep()为延迟函数,单位为毫秒,如值为1000时表示延迟1秒。

ExitLoop为退出循环函数,可以从WhileDoFor循环中退出。

我们介绍一下上面编写的语句的意思,主要是:

     首先运行KV2006安装程序。

     进入循环,等待“卸载界面”和“安装界面”的出现,因为安装程序在不同的计算机上,运行所需要的时间不同,所以要循环执行并且在每次循环之后有一段时间的延迟。

     如果进入卸载界面,则运行后面的卸载程序,运行完毕后,退出程序。

  如果进入安装界面,则有“修复安装”和“新安装”两项,我们用【WinWaitActive("江民杀毒软件KV2006","安装")】代替了【WinWaitActive("江民杀毒软件KV2006","全新安装")】和【WinWaitActive("江民杀毒软件KV2006","修改安装")】两句,所以可以不用再写分支程序。

在使用AutoIt的过程中,只要多做测试,正确捕获对话框或窗口的名称,可以很容易的编写AutoIt的脚本。如果有不熟悉的命令,可以查看AutoIt的帮助文件,它的帮助手册是非常详细的。

最后,我们把制作好的脚本编译成可执行程序,就可以脱离AutoIt来运行了,这样可以直接用在各种环境中(如使用组策略分发软件时,通过编辑相应的zap文件来运行相应的、经过编译的AutoIt脚本程序即可以自动安装软件)。编译成可执行程序的方法有两种,一种是用鼠标右键单击编写好的脚本,选择“Compile Script”即可以编译成可执行程序,如图1-267所示。

1-267 编译成可执行程序

另一种方法是运行“AutoIt v3程序组中的“Compile Script to .exe”程序,选择AutoIt脚本、将要编译的程序名、选择图标后,单击【Convert】按钮完成转换,如图1-268所示。

1-268 转换成exe程序