# Installing multiple programs

## Recommended Posts

Hi all,

I am trying to use autoit to install multiple applications, one after the other.

A problem I am having is that after I've installed Adobe Acrobat 9.0 , my script then opens the program and makes a few changes to settings. While this part of the script is running, the next program starts installing before acrobat is finished.

Any suggestions would be appreciated.

##### Share on other sites

- Bruce /*somdcomputerguy */  If you change the way you look at things, the things you look at change.

##### Share on other sites

Here is the first few lines from the master installer script.

; Install AVG 9
#include "C:\installfiles\avg\install.au3"
sleep(2000)

; Install Acrobat
sleep(2000)

; Install CCleaner
#include "C:\installfiles\CClearner\install.au3"
sleep(2000)

send("!n")
send("!i")
send("!f")

; Start Acrobat, Accept EULA and close

send("!{F4}")

And here is the code from the next program's script.

Run('C:\installfiles\CClearner\ccsetup228.exe')

If Not WinActive("Installer Language","Please select a lang") Then WinActivate("Installer Language","Please select a lang")
Send("{ENTER}")
WinWait("CCleaner v2.28 Setup","Welcome to the CClea")
If Not WinActive("CCleaner v2.28 Setup","Welcome to the CClea") Then WinActivate("CCleaner v2.28 Setup","Welcome to the CClea")
WinWaitActive("CCleaner v2.28 Setup","Welcome to the CClea")
Send("{ALTDOWN}n{ALTUP}")
WinWait("CCleaner v2.28 Setup ","Please review the li")
If Not WinActive("CCleaner v2.28 Setup ","Please review the li") Then WinActivate("CCleaner v2.28 Setup ","Please review the li")
WinWaitActive("CCleaner v2.28 Setup ","Please review the li")
Send("{ALTDOWN}a{ALTUP}")
WinWait("CCleaner v2.28 Setup ","Choose Install Locat")
If Not WinActive("CCleaner v2.28 Setup ","Choose Install Locat") Then WinActivate("CCleaner v2.28 Setup ","Choose Install Locat")
WinWaitActive("CCleaner v2.28 Setup ","Choose Install Locat")
Send("{ALTDOWN}n{ALTUP}")
If Not WinActive("CCleaner v2.28 Setup","Select any additiona") Then WinActivate("CCleaner v2.28 Setup","Select any additiona")
Send("{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{TAB}{SPACE}{ALTDOWN}i{ALTUP}")
WinWait("CCleaner v2.28 Setup ","Completing the CClea")
If Not WinActive("CCleaner v2.28 Setup ","Completing the CClea") Then WinActivate("CCleaner v2.28 Setup ","Completing the CClea")
WinWaitActive("CCleaner v2.28 Setup ","Completing the CClea")
Send("{SPACE}{ALTDOWN}f{ALTUP}")

##### Share on other sites

Make a launcher script which calls the installation scripts sequentially via RunWait. That's how I did mine and it's doing fine.

##### Share on other sites

Welcome KluYa,

I guess your question is how to allow only 1 installation at a time included within the same script?

Use ProcessWaitClose() to prevent your script from continuing until the process has finished.

Example:

$pid = Run('path\to\file1.exe') ; automation code ProcessWaitClose($pid)

$pid = Run('path\to\file2.exe') ; automation code ProcessWaitClose($pid)

##### Share on other sites

Welcome KluYa,

I guess your question is how to allow only 1 installation at a time included within the same script?

Use ProcessWaitClose() to prevent your script from continuing until the process has finished.

Example:

$pid = Run('path\to\file1.exe') ; automation code ProcessWaitClose($pid)

$pid = Run('path\to\file2.exe') ; automation code ProcessWaitClose($pid)

Or RunWait() if you want to avoid the extra line of code.

Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer.

##### Share on other sites

Well, as RunWait pauses execution while the program is running the ; automation code in Mhz' code wouldn't run when you use RunWait. So in that case it's not likely you want to use RunWait, or am I missing something ?

##### Share on other sites

Well, as RunWait pauses execution while the program is running the ; automation code in Mhz' code wouldn't run when you use RunWait. So in that case it's not likely you want to use RunWait, or am I missing something ?

This is true. I generally use switches for silent installation, so I don't have any automation code. I over looked his comments in the code itself.

Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer.

##### Share on other sites

Thank you all very much, this has been very helpful

I was only introduced to this program AutoIt last week so I'm still learning.

##### Share on other sites

Ok, so The problem with Adobe Acrobat is fixed but now I'm having the same problem when installing .NET Framework 2.0.

Midway through installation of .NET Framework 2.0 the next program tries to install failing because something else is already installing.

Here is the script for .NET Framework 2.0

$pid = Run("C:\installfiles\dot net framework 2\dotnetfx2.exe") WinWaitActive("Microsoft .NET Framework 2.0 Setup", "This wizard will guide you") Send("!n") WinWaitActive("Microsoft .NET Framework 2.0 Setup", "End-User License Agreement") Send("!a") Send("!i") WinWaitActive("Microsoft .NET Framework 2.0 Setup", "It is highly recommended that you download") Send("!f") if ProcessExists($pid) Then
Do
ProcessClose($pid) Until ProcessWaitClose($pid)
EndIf
ProcessWaitClose($pid) Part of the main script which calls the other ones. ; Install Dot Net 2.0 #include "C:\installfiles\dot net framework 2\install.au3" sleep(2000) ; Installing Dot Net 3.5 last because it needs a reboot ; Install Dot Net 3.5 #include "C:\installfiles\dot net framework 3.5\install.au3" sleep(2000) The next script after .NET Framework 2.0$pid = Run("C:\installfiles\dot net framework 3.5\dotnetfx35.exe")

$title = "Microsoft .NET Framework 3.5 SP1 Setup"$visibletext = "Welcome to Setup"
WinWait($title,$visibletext)
If Not WinActive($title,$visibletext) Then WinActivate($title,$visibletext)
WinWaitActive($title,$visibletext)
Send("{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}{SPACE}{ALTDOWN}i{ALTUP}")

$visibletext = "Microsoft .NET Framework 3.5 SP1 has been installed successfully." WinWait($title,$visibletext) If Not WinActive($title,$visibletext) Then WinActivate($title,$visibletext) WinWaitActive($title,$visibletext) Send("!x")$visibletext = "&Restart Now"
WinWait($title,$visibletext)
If Not WinActive($title,$visibletext) Then WinActivate($title,$visibletext)
WinWaitActive($title,$visibletext)
Send("!l")

WinWaitActive("Microsoft .NET Framework 3.5 SP1 Setup", "Setup Complete")
Send("!x")
if ProcessExists($pid) Then Do ProcessClose($pid)
Until ProcessWaitClose($pid) EndIf ProcessWaitClose($pid)

The problem definitely isn't the next script, as I've tried calling other installers after .NET 2.0

##### Share on other sites

PM sent. I sent you a copy of a multiple install script I use from time to time. Let me know if that works for you.

##### Share on other sites

Ok, so The problem with Adobe Acrobat is fixed but now I'm having the same problem when installing .NET Framework 2.0.

Midway through installation of .NET Framework 2.0 the next program tries to install failing because something else is already installing.

Here is the script for .NET Framework 2.0

DotNet 3.5 includes DotNet 2.0 so no need to install DotNet 2.0 from another installer. It is more convenient to use switches with DotNet as no options exist that switches can not handle.

These switches used should hopefully help to make it easier to install the programs. I do not use AVG or Adobe Reader so cannot verify what my searches found. You may want to check out Identify Installer in SendToA3X for finding switches for any other installers that you may have.

; in C:\installfiles\avg\install.au3
RunWait('"' & @ScriptDir & '\avg_free_stf_en_90_707a1765.exe" ' & _
'/PROGRESSONLY /NOSTART /DISABLE_SCAN /NOAVGTOOLBAR ' & _
'/REMOVE_FEATURE fea_AVG_SafeSurf /REMOVE_FEATURE fea_AVG_SafeSearch')

RunWait('"' & @ScriptDir & '\AdbeRdr920_en_US.exe" /sAll')

; in C:\installfiles\CClearner\install.au3
RunWait('"' & @ScriptDir & '\ccsetup229_slim.exe" /S')

; in C:\installfiles\dot net framework 3.5\install.au3
RunWait('"' & @ScriptDir & '\dotnetfx35.exe" /qb /norestart')

Oh, if you have not already got it, get the slim CCleaner from the other builds section of the download page here. It has no spyware.

if ProcessExists($pid) Then Do ProcessClose($pid)
Until ProcessWaitClose($pid) EndIf ProcessWaitClose($pid)

The code above may cause problems. Best to work with the install rather then against it. MSIexec can be temperamental so take care when using "ProcessClose($pid)" . The loop would also not loop as "Until ProcessWaitClose($pid)" blocks until the process is closed so instead use "Until Not ProcessExists($pid)" . I would probably only use "ProcessWaitClose($pid)" if I were to not use the switches previously mentioned.

## Create an account

Register a new account