mrbTT
mrbTT

Reputation: 1409

Wscript make proccess not run on background or wait while finishes

Scenario: We have some scheduled jobs (Control-M) running many proccesses and some of them execute a .VBS file (with parameters) that reads the configuration from an XML file and sends it to a company's software that interprets it and loads data onto tables.

I need help with the VBS file, that as stated above, only gets the instructions from the XML and send it to the software with these steps (also, logs each step):

  1. Finds the XML;

  2. Creates an object to login the software (with XML parameters);

    Dim object 
    Set object = CreateObject("service.location.id")
    
  3. Login into the Database (with XML parameters);

    object.Login("DATABASE_NAME")
    
  4. Select which Data base (XML...);

    object.SelectDatabase("DATABASE_NAME")
    
  5. Sends command to start load proccess

    object.LoadRepositoryTable(XML)
    

The problem is that since the default interpreter is wscript, when executing the script, it runs on the background and the Job Scheduler thinks it finished executing and starts the next job.

Executing the script on CMD, if I start it as cscript SCRIPT.vbs it waits for the whole load proccess to finish (it doesn't run on background), and I want to do this when running as wscript - because since there are many jobs, editing how they calls the script is not an option right now. This includes creating an .bat file that calls the SCRIPT.vbs as cscript.

I also tried searching on "how to run another .vbs file inside a VB Script" to run as cscript, but didn't manage to make it work.

What can I do?

Is there a way to make wscript wait for the load?

Is there a way to call a .vbs in the same folder (without sending it as parameter) while passing 2 arguments?

Another option I'm not seeing?

Edit: Here is what I've come to so far, but I'm getting "expected end of statement".

Dim objShell
Dim arg_dir 
arg_dir = Wscript.Arguments.Item(0)
Dim arg_xml 
arg_xml = Wscript.Arguments.Item(1)
Set objShell = CreateObject("Wscript.Shell")

objShell.Run "cmd /k cscript ""C:\Folder\Scripts\SCRIPT.vbs" &" "& arg_dir &" "& arg_xml"", 1, True

Upvotes: 0

Views: 1071

Answers (1)

Ansgar Wiechers
Ansgar Wiechers

Reputation: 200233

cscript is the solution for your problem. Either have your scheduler run each VBScript with cscript.exe, or (if that isn't possible for some reason) make cscript the default script host by running

wscript.exe //h:cscript

once as an administrator.

The script you have cobbled together won't resolve your problem, even if you fixed the syntax error in the last line, because as long as you run it with wscript.exe it will still return immediately. It doesn't matter that the code in that script is running other scripts synchronously as long as all of that is happening in the background.

Upvotes: 1

Related Questions