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

JohnyV
  • 938
  • 4
  • 26
  • 45
  • 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. – 3dinfluence Mar 05 '10 at 03: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 05 '10 at 03:46

1 Answers1

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.

fission
  • 3,601
  • 2
  • 21
  • 31
  • 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 07 '10 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 07 '10 at 23:00