0

I need a vb script that will wrap around an applcation which will stay open until the application finishes. I want to be able to call the following command

"setup.exe /qb /I Autocad2010.ini /language en-us"

But I need the vb script to stay running until the setup has finished.

Is there anyone out there that can assist with this.

Much appreciated in advance

2
  • Are you trying to use VB to deploy Autocad to a bunch of computers? If that's what you're trying to accomplish you may want to have a look at wpkg.org. They will provide you a app deployment mechanism that can run pre and post install commands or scripts. Mar 5, 2010 at 3:19
  • I am trying to deploy autocad with MDT but the apps keep trying to start before the other finishes. So i was told that if I run a vbscript around the apps that MDT will see it as an app and wait for it to finish. The packages I have are from the deployment on the autocad discs.
    – JohnyV
    Mar 5, 2010 at 3:46

1 Answer 1

1

Updated version

The following will execute your setup program, then wait for there to be no more instances of setup.exe running. There is a maximum timeout value you can set (so that it doesn't hang forever).

Please note that this can't detect whether setup is done, only whether or not a setup.exe process is running. It's a minor distinction, but an important one.

Option Explicit

Const PROC_NAME = "setup.exe"
Const RUN_CMD = "setup.exe /qb /I Autocad2010.ini /language en-us"
Const SLEEP_INTERVAL_MS = 1000
Const WAIT_TIMEOUT_MS = 1500000 ' = 1000 * 60 * 25 ms = 25 mins

Dim objWshShell, objWMIService
Dim colProcesses, objProcess
Dim intWaited, blnProcessTerminated

Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set objWshShell = WScript.CreateObject("WScript.Shell")
objWshShell.Run RUN_CMD

intWaited = 0
blnProcessTerminated = False
While intWaited < WAIT_TIMEOUT_MS And Not blnProcessTerminated
    Set colProcesses = objWMIService.ExecQuery(_
        "Select * from Win32_Process where Name='" & PROC_NAME & "'")

    blnProcessTerminated = True
    For Each objProcess In colProcesses
        blnProcessTerminated = False
    Next

    WScript.Sleep(SLEEP_INTERVAL_MS)
    intWaited = intWaited + SLEEP_INTERVAL_MS
Wend

This is relatively straightforward:

Option Explicit

Dim objWshShell
Set objWshShell = WScript.CreateObject("WScript.Shell")
objWshShell.Run "setup.exe /qb /I Autocad2010.ini /language en-us", 1, True

The parameters to the Run method are described in greater detail on the MSDN site. Most importantly, True causes the script to wait until setup.exe has terminated.

2
  • I tried this script but the script stops before the setup.exe is finsihed. Therefore MDT thinks that the application has stopped installing and continues on its task sequence.
    – JohnyV
    Mar 7, 2010 at 21:46
  • The script waits until that setup.exe finishes – but it could be that setup.exe launches another instance of itself. I'll update my answer with a version that waits until no setup.exe is detected to be running on the system.
    – fission
    Mar 7, 2010 at 23:00

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .