Re: VBScript halts with out error message

Tech Tip: Click here to run a free scan for Windows Errors and optimize PC performance



On Apr 20, 11:48 am, Dan <D...@xxxxxxxxxxxxxxxxxxxxxxxxx> wrote:
I cahnged the call line to:

Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "D:\BatchJobs\WebSiteSync\Sync.bat",0,bWaitOnReturn

But despite numerous arrangements of the .run line with varied parameters,
it will not wait for the called job to complete before it goes on to the next
line.

"Pegasus [MVP]" wrote:

"Dan" <D...@xxxxxxxxxxxxxxxxxxxxxxxxx> wrote in message
news:F4697881-9ED9-4829-9791-1B5D87249F0F@xxxxxxxxxxxxxxxx
I have a script that creates and calls a batch file.  It runs through 17
commands and then freezes.  If I exit the script and run the batch file it
created, it runs fine.  The command lines are based on IIS websites..  If I
remove the websites surrounding the point of failure and run the script,
it
still processes exactly 17 command (which is also 17 websites.)  Any
ideas?
Here is the script:

Const ForReading = 1
Const ForWritting = 2
Const ForAppending = 8

Set fso = CreateObject("Scripting.FileSystemObject")
Set strFile = fso.OpenTextFile("D:\BatchJobs\WebSiteSync\sites.txt",
ForReading)
Set strCommand = fso.OpenTextFile("D:\BatchJobs\WebSiteSync\Sync.bat",
ForWritting)
set strLog = fso.openTextFile("D:\BatchJobs\WebSiteSync\msdeploysync.log",
ForWritting)

strLog.WriteLine Date() & " " & Time()
strLog.WriteLine "Calling Creation of Web Site List"

Dim oWsc, oExec
Set oWsc = CreateObject("WScript.Shell")
Set oExec = oWsc.Exec("D:\BatchJobs\WebSiteSync\CreateList.bat")
' wait until finished
Do While oExec.Status <> 1
WScript.Sleep 100
Loop

strLog.WriteLine err.number & " " & err.description
err.number = 0
strLog.WriteLine
strLog.WriteLine "Reading WebSites"
strLog.WriteLine

strCommand.WriteLine "msdeploy -verb:sync -source:appPoolConfig
-dest:appPoolConfig,computerName=IISServer2"
Do Until strFile.AtEndOfStream
s = strFile.ReadLine
x = Instr(s, chr(34))
if x > 0 then
 SiteName = right(s, len(s) - x)
end if
y = Instr(SiteName, chr(34))
if y > 0 then
 SiteName = left(SiteName,y-1)
end if
if SiteName <> "Default Web Site" then
 strCommand.WriteLine "msdeploy -verb:sync -source:apphostconfig=" &
chr(34) & SiteName & chr(34) & ",includeAcls=true -dest:apphostconfig=" &
chr(34) & SiteName & chr(34) & ",computerName=IISServer2 -debug -verbose

D:\BatchJobs\WebSiteSync\msdeploysync.log"
end if
loop

strLog.WriteLine "Calling Sync.bat"
strLog.WriteLine

strFile.Close
strCommand.Close
strLog.close

Set oExec = oWsc.Exec("D:\BatchJobs\WebSiteSync\Sync.bat")
Do While oExec.Status <> 1
WScript.Sleep 30000
Loop

set strLog = fso.openTextFile("D:\BatchJobs\WebSiteSync\msdeploysync.log",
ForAppending)
strLog.WriteLine "Finished at " & Date() & " " & Time()
strLog.close

The Exec method is not suitable when you need to wait until a shell command
has completed its operation. Use the Run method instead - it accepts an
optional parameter bWaitOnReturn.

Dan,

First, you need to define the value of bWaitOnReturn: True means wait
and false (default) means don't wait. Commonly this is done with a
literal, rather than a variable (unless it is programatically
important to be a variable). So, you probably want ...

Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "D:\BatchJobs\WebSiteSync\Sync.bat",0,True

However, the Exec.Status checks and looping you had in your original
script should have worked in fundamentally the same way. Therefore, I
must conclude that the underlying operations contained in your batch
procedures are the source of your problem. Since you didn't post
those, it's hard to be sure, but from your description, I can't
imagine anything else. Specifically, if an application invoked in one
or more of the batch files is a Win32 application or is launching an
additional thread and then terminating, the batch procedures would end
and return control to your script, even while the application
continues to run. To get this behavior under control, a START
statement to launch the offending application(s) in the batch may be
all that is needed. However, it might be harder than that.

I think some insight into the batch procedures may be needed to solve
your problem.

Tom Lavedas
***********
http://there.is.no.more/tglbatch/
.



Relevant Pages

  • Re: vbscript runonce key
    ... runonce key again to run the batch file and reboot the script runs all the ... Instead of invoking the script directly, ... Dim objComputer, strModel, strMfg, WshShell, oExec, strCommand ... Set WshShell = CreateObject ...
    (microsoft.public.scripting.vbscript)
  • Re: making a script
    ... batch command: executed successfully. ... I have used gimp's batch processing only slightly, ... You are using the batch mode to execute a scheme script ...
    (comp.graphics.apps.gimp)
  • Re: UNIX tr utility written in vbscript
    ... Does anyone have a trick of combining a batch ... > A batch file can run a VBScript program, and you can pass the name of> the ... > Example.vbs with the following command: ... write a batch script that creates the vbscript file to be called. ...
    (microsoft.public.scripting.vbscript)
  • Re: Automated script to backup IE favorites?
    ... Diego - disregard last message I got it! ... If you don't want to use a batch file, ... you have to create a GPO to run the batch or WSH script on user logoff ... MS MVP Windows - Internet Explorer ...
    (microsoft.public.windows.inetexplorer.ie6.browser)
  • Re: Returning a value from a VBScript
    ... VBScript for use by another script, batch file, or other command. ... echo MyScript.vbs returned an ErrorLevel of %ErrorLevel% ...
    (microsoft.public.scripting.vbscript)