Re: VBScript halts with out error message
- From: "ekkehard.horner" <ekkehard.horner@xxxxxxxx>
- Date: Mon, 20 Apr 2009 18:28:22 +0200
T Lavedas schrieb:
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 17The Exec method is not suitable when you need to wait until a shell command
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
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/
If you use:
'' starter.vbs - start [a]sync.bat
Option Explicit
Dim sCmd : sCmd = ".\sync.bat"
Dim oWSH : Set oWSH = CreateObject( "WScript.Shell" )
Dim oWAN : Set oWAN = WScript.Arguments.Named
If oWAN.Exists( "async" ) Then sCmd = ".\async.bat"
WScript.Echo "starter started"
WScript.Echo "starting", sCmd
Dim iRet : iRet = oWSH.Run( "%comspec% /c " & sCmd, 1, True )
WScript.Echo "iRet =", iRet
WScript.Echo "starter terminated"
WScript.Quit 0
to start either:
@ECHO OFF
REM sync.bat - running worker.vbs
ECHO sync.bat started
ECHO running worker.vbs
cscript worker.vbs 10000
ECHO sync.bat terminated
for a synchron run or
@ECHO OFF
REM async.bat - kicking off worker.vbs
ECHO async.bat started
ECHO kicking off worker.vbs
start cscript worker.vbs 10000
ECHO sync.bat terminated
for an asynchron kick off of:
'' worker.vbs - working for some time
Option Explicit
Dim nSleeps : nSleeps = 5000
Dim oWAU : Set oWAU = WScript.Arguments.UnNamed
If 1 = oWAU.Count Then
If IsNumeric( oWAU( 0 ) ) Then
nSleeps = CInt( oWAU( 0 ) )
End If
End If
WScript.Echo "Worker started"
Dim nStep : nStep = nSleeps \ 5
Do Until nSleeps < 0
WScript.Echo "Working ..."
WScript.Sleep nStep
nSleeps = nSleeps - nStep
Loop
WScript.Echo "worker terminated"
WScript.Quit 0
you get a live demonstration of Tom's theoretical explanation.
.
- References:
- VBScript halts with out error message
- From: Dan
- Re: VBScript halts with out error message
- From: Pegasus [MVP]
- Re: VBScript halts with out error message
- From: Dan
- Re: VBScript halts with out error message
- From: T Lavedas
- VBScript halts with out error message
- Prev by Date: RE: VBScript root folder property question
- Next by Date: Script Mapping all Drives
- Previous by thread: Re: VBScript halts with out error message
- Next by thread: Re: VBScript halts with out error message
- Index(es):
Relevant Pages
|