2005年4月12日 13:47

自動安裝程式 - 試試AutoIt

autoit最近在研究Unattended XP,也就是現在常聽到的"無人值守"XP安裝光碟啦!
在XP的瘦身方面,nLite是一套很方便的工具
但是其他各種不同的程式想要在開機自動安裝可就不是一件簡單的事
AutoIt正是一個方常好的解決方案!
不過這不是自動化的方案,最好要有點程式基礎比較好學。
由於各種不同的程式使用的安裝套件都不同,要自動安裝下的參數也不盡相同,有時候一些選項又不想選(例如安裝realone卻又不想讓它成為預設播放程式)

這時候AutoIt就可以派上用場

AutoIt可以讓你使用簡單的程式語言,來控制Windows的各種介面以及模擬鍵盤滑鼠行為的語言,並且可以直接與各種Windows控制項互動,所以說幾乎各種動作都能夠做到了,它也附了一個方便的小程式"AutoIt Window Info"可以顯示每個視窗的資訊以及控制項。



以下的例子是安裝個人愛用的音樂播放器:foobar2000 v0.9.6.9 Setup版,並將Monkey Audio的外掛檔foo_input_monkey.dll複製到foobar2000安裝目錄的components目錄中:


;執行foobar2000安裝檔
Run("foobar2000_0.9.6.9.exe")
; 等待foobar2000 v0.9.6.9 Setup的安裝視窗出現
WinWaitActive("foobar2000 v0.9.6.9 Setup")
Photobucket
; 按下一步,alt+n的寫法就是!n,以此類推
Send("!n")
; 等待下一個foobar2000 v0.9.6.9 Setup的安裝視窗出現
WinWaitActive("foobar2000 v0.9.6.9 Setup")
Photobucket
; 按"I Agree",也就是alt+a
Send("!a")
; 等待下一個foobar2000 v0.9.6.9 Setup的安裝視窗出現
WinWaitActive("foobar2000 v0.9.6.9 Setup")
Photobucket
;預設選擇Standard installation,按下一步
Send("!n")
; 等待下一個foobar2000 v0.9.6.9 Setup的安裝視窗出現
WinWaitActive("foobar2000 v0.9.6.9 Setup")
Photobucket
;如果要改變安裝目錄,使用AutoIt Window Info工具取得控制項名稱為Edit1,
;並使用ControlSetText設定新的路徑值,然後用ControlGetText將路徑記錄下來,
;後面會用到
;用法:ControlSetText ( "視窗標題", "視窗內的文字", "控制項ID", "設定的文字" )
;(function的參數設定可參考線上文件,以下省略)

ControlSetText("foobar2000 v0.9.6.9 Setup", "", "Edit1", "D:\foobar2000" )
$path = ControlGetText("foobar2000 v0.9.6.9 Setup","","Edit1")
; 按下一步
Send("!n")
; 等待下一個foobar2000 v0.9.6.9 Setup的安裝視窗出現
WinWaitActive("foobar2000 v0.9.6.9 Setup")
Photobucket
; 如果要選擇不同安裝方式,使用AutoIt Window Info工具取得下拉式選單控制項ComboBox1,
;將ComboBox1控制項的下拉式選單拉下

ControlCommand("foobar2000 v0.9.6.9 Setup","","ComboBox1","ShowDropDown","")
; 看你要選擇哪種安裝方式,這裡是選Full,也就是完整安裝
ControlCommand("foobar2000 v0.9.6.9 Setup","","ComboBox1","SelectString",'Full')
; 按下一步
Send("!n")
; 等待下一個foobar2000 v0.9.6.9 Setup的安裝視窗出現
WinWaitActive("foobar2000 v0.9.6.9 Setup")
Photobucket
; 按開始安裝,也就是alt+i
Send("!i")
; 這裡比較麻煩的是要跳過安裝進度視窗,等待安裝完成的視窗出現,
;因為視窗名稱都一樣,所以加入第二個參數,表示安裝完成視窗上會出現的文字

WinWaitActive("foobar2000 v0.9.6.9 Setup","Completing the foobar2000 Setup")
Photobucket
; 單按滑鼠在Button4控制項,將"Run Foobar2000"的選項取消
ControlClick("foobar2000 v0.9.6.9 Setup","","Button4")
; 按Finish完成安裝
Send("!f")
; 將$path變數改為安裝components的路徑
$path=$path & "\components"
; 將foo_input_monkey.dll複製到components目錄中,1是強制覆蓋的意思
FileCopy("foo_input_monkey.dll",$path,1)


然後將這個script檔存成au3檔便可以執行看看,
沒問題之後可以用Autoit的Compile Script to .exe工具編譯成.exe執行檔,以後不需要安裝AutoIt就可以執行。

以上只用到AutoIt強大功能的皮毛而已,現在已經出到v3版,還可以自己製作GUI,甚至可以直接call DLL的function,有興趣可以看內附的help檔有詳細說明,或是參考線上文件


  • sherwin 發表於樂多回應(12)引用(0)Software編輯本文
    樂多分類:網路/3C切換閱讀版型 │昨日人次:19 │累計人次:36503
     

    引用URL

    http://cgi.blog.roodo.com/trackback/71806

    回應文章
    謝謝你的分享
    這個範例幫了我大忙
    | 檢舉 | Posted by 路人 at 2006年2月23日 13:01
    這位大大謝謝你囉
    這篇文章讓我更了解AUTOIT的使用方法^^
    | 檢舉 | Posted by 小鋒 at 2006年7月7日 10:39
    感謝您,真的很謝謝,上網想找個範例都一直沒有好心人,謝謝~~^^
    | 檢舉 | Posted by Victor at 2006年9月27日 15:02

    可不可以教我如何從script檔編譯成exe檔?
    也是用Autoit嗎?
    而且當你編成exe檔之後那資料夾裡就可以不用原本的exe檔嗎?
    還是資料夾裡還會看到你原本的exe檔,比如你的例子裡就是foobar2000_special.exe
    也就是說產生了新的exe檔後
    資料夾裡只需放置"新.exe"還是會有"舊.exe"&"新.exe"?
    而"新.exe"也只是決定"舊.exe"的執行步驟,而不是取代它?
    | 檢舉 | Posted by kytainchen at 2008年3月24日 17:58

    不好意思,因為是三年前寫的,我也忘了
    記得他有附程式可以轉
    不過原來的exe應該還是要留著吧..
    | 檢舉 | Posted by Sherwin at 2008年3月25日 08:33

    感謝你的回答
    我自己執行過後的確像你所講的那樣
    如果我手上有三個軟體(分別為軟體1,軟體2,軟體3)
    這三個軟體目前都需要個別安裝,才能去驅動某個硬體設備
    而且三個軟體的安裝順序也必須是軟體1-->軟體2-->軟體3
    順序不能顛倒
    問題是我希望可以將這三個封裝成一個
    也就是到時我要驅動這個硬體只需setup某個執行檔(setup.exe)
    也就是setup.exe=軟體1.exe+軟體2.exe+軟體3.exe
    這樣一來我就不需要每次在別台電腦都要個別去執行這三個軟體才能驅動那個硬體設備
    我知道Autoit可以寫腳本去決定執行的順序
    但是這樣一來跟寫bat檔是一樣的效果
    (當然Autoit的腳本可以決定更細的步驟)
    希望的是某個setup.exe直接取代這三個軟體
    就算沒有壓縮也沒關係
    比如:軟體1(3MB)軟體2(4MB)軟體1(5MB)
    取代的setup.ext有3+4+5=12MB
    這樣的方式也可接受
    重點只是想省略執行三個軟體要分別執行的麻煩而已,並不是要省空間
    不知你對這個問題有沒有什麼建議?
    再次感謝你的回答
    | 檢舉 | Posted by kytainchen at 2008年3月25日 08:59

    唔....
    目前想的到的還是只有寫個bat吧= =
    用bat照順序執行三個軟體用Autoit寫成的exe
    | 檢舉 | Posted by Sherwin at 2008年3月25日 09:57


    我想也是
    感謝你的回答
    | 檢舉 | Posted by kytainchen at 2008年3月25日 12:01
    大大,請問如何以AutoIt製作一個迴路「一次」關閉所有Iexplore瀏覽器?
    | 檢舉 | Posted by Allen at 2008年4月8日 18:39

    可以留下即時通或msn嗎?
    有問題想請教你呢...
    | 檢舉 | Posted by Ethan at 2008年9月28日 17:44
    寫的超清楚的啦!為了研究自動安裝花了一些時間!感謝您的分享耶!
    ---------------------------------------------
    版主回覆:
    有幫到忙就好^^
    | 檢舉 | Posted by TXboss at 2010年2月24日 19:33

    謝謝
    | 檢舉 | Posted by 高屁屁 at 2012年3月1日 17:47