wwb007 发表于 2011-4-20 15:58:13

打包和提权安装软件

看了很多自动安装的方法,觉得很实用。企业里运行就需要把自动运行脚本和程序一起打包成一个exe文件,然后再提权安装。研究了一段时间,以"好压"为例分享一下我的代码:$Exe = "haozip_v2.2.exe"
FileInstall("haozip_v2.2.exe" , @SystemDir & "\",1)
Local $username="administrator"
Local $password="9a;asi9dw"

RunAs($username,@Computername,$password,2,$Exe, @TempDir & "\")
BlockInput(1) ;锁定键盘鼠标

;--------------------------------------------------------------;一键安装脚本开始
Opt("TrayIconDebug", 1) ;0=无信息, 1=调试信息
Opt("WinTextMatchMode", 2) ;1=完全匹配, 2=快速匹配
Opt("WinTitleMatchMode", 4) ;1=开头, 2=子串, 3=完全, 4=高级
Opt("WinSearchChildren", 1) ;0=不搜索, 1=搜索子窗口
Opt("WinDetectHiddenText", 1) ;0=不检测, 1=检测
$WinTitle_1= '好压 v2.2 安装 '
$Wintxt_1= '我接受(&I)'
$Wintxt_2= '< 上一步(&P)'
$WinTitle_2='好压(HaoZip) - 感谢您的安装!'
$Wintxt_3='确定(&O)'
Do
        Sleep(10);
Until WinExists($Wintitle_1)
WinWaitActive($Wintitle_1, $Wintxt_1);
ControlClick($Wintitle_1, $Wintxt_1, "Button2")
WinWaitActive($Wintitle_1, $Wintxt_2);
ControlClick($Wintitle_1, $Wintxt_2, "Button2")
WinWaitActive($WinTitle_2,$Wintxt_3);
ControlClick($WinTitle_2,$wintxt_3, "Button62")
MsgBox(0,$WinTitle_2,"恭喜,成功安装完成!",3)

;--------------------------------------------------------------;自动安装脚本结束

ProcessWaitClose($Exe);等待进程运行完毕
BlockInput(0);解锁键盘鼠标
FileDelete(@SystemDir & "\" & $Exe)
仍然有不理想的地方,在局域网里运行时,Copy的时间相当长。
如果可以实现Copy程序自身到@TempDir后再运行,运行后再删除自身就完美了。

dyd 发表于 2011-4-20 17:19:28

好东西,学习下

mo_shaojie 发表于 2011-4-20 20:08:04

楼主用fileinstall打包进去不行吗?

wwb007 发表于 2011-4-21 10:57:15

本帖最后由 wwb007 于 2011-4-21 11:01 编辑

楼主用fileinstall打包进去不行吗?
mo_shaojie 发表于 2011-4-20 20:08 http://www.autoitx.com/images/common/back.gif

已经用了FileInstall,问题不在于打包本身,而是将打包后的文件放在网络盘上,用户运行后会从网络盘开始解压缩,释放到本地后运行。使用网线还算凑合,一旦用Wifi就惨了,双击后感觉像没运行一样(此时正在解压后通过网络传送到本地),用户就会反复运行,导致多个副本反复执行甚至死机。
所以希望运行时先复制程序自身到本地(最好带进度条),然后开始解压,安装等一系列后续动作,最终将这些临时文件统统删除。

a677520 发表于 2011-4-22 16:31:52

大概能明白你的意思了

wwb007 发表于 2011-4-25 11:15:46

为啥没人过问{:face (52):}

dingcool 发表于 2017-4-1 21:36:22

为什么不直接先FILECOPY ,然后设计一个运行状态栏process是否存在exe来防止重复运行
页: [1]
查看完整版本: 打包和提权安装软件