12

I have a Windows service (the Bamboo integration server) that runs a batch file as a subprocess (a build job) of that script. Within that batch file I would like to be able to start a process (let's call it workerprocess.exe) and have that process run in the background. This is all good, I've used:

start "title" /B workerprocess.exe

That is all well and good. The problem is that this then holds up the completion of the build job. So the batch script finishes, but because of the workerprocess.exe subprocess, the service (Bamboo) does not know that it has finished: it still waits for (and displays output from) the workerprocess.exe.

I've looked in the documentation for the start command, and I can't see anything that does what I want. I saw this question but it didn't really help either - the service still ends up waiting for the process to finish.

So I guess in summary: how can I run a new process from a batch script so that it is completely detached and won't hold up anything that happens to be waiting for that batch script to complete.

2 Answers2

5

To self-hide already running script you'll need getCmdPid.bat and windowoMode.bat

@echo off

echo self minimizing call getCmdPid.bat call windowMode.bat -pid %errorlevel% -mode hidden

echo --other commands-- pause


All linked scripts can be downloaded and saved with whatever name you find convenient.

  1. The IEXPRESS solution - as arguments accepts only the command and its arguments.

Example usage:

call hidder.bat myBat.bat  myexe.exe
call myexe.exe
  1. SCHTASKS - Again accepts only two arguments - the command and the arguments.Also checks if it's started with elevated permissions and if possible gets the PID of the process with WEVTUTIL command.

Example usage:

call SCHPhidden.bat "cmd /c myBat.bat"  "argument"
  1. 'WScript.Shell' - the script is full wrapper of 'WScript.Shell' and every possible option can be set through the command line options.It's a jscript/batch hybrid and can be called as a bat.

Example usage (for more info print the help with '-h'):

call ShellRunJS.bat "notepad.exe" -style 0 -wait no 
  1. 'Win32_ProcessStartup' - again full wrapper and all options are accessible through the command line arguments.This time it's WSF/batch hybrid with some Jscript and some VBScript pieces of code - but it returns the PID of the started process.If process id not hidden some options like X/Y coordinates can be used.

Example usage (for more info print the help with '-h').This will require the full path to the executable/script if it is not in the %path%:

call win32process.bat "notepad" -arguments "/A openFile.txt"  -showWindow 0 -title "notepad"
  1. The .NET solution . Most of the options of ProcessStartInfo options are used (but at the end I was too tired to include everything):

Example usage (for more info print the help with '-h'):

call ProcessStartJS.bat "notepad" -arguments "/A openFile.txt"  -style Hidden -directory "." -title "notepad" -priority Normal
npocmaka
  • 1,313
2

Have you tried Hidden Start (HSTART)? (Costs $20)

I use it personally to run an hourly batch job with the window hidden. They also mention that you can run commands sequentially as a parameter (or by default, I assume) run asynchronously. I don't know how this will affect your contention on CPU, memory, or disk... but the software also gives you the option to wait some time before performing the action.

endolith
  • 7,704
Sun
  • 6,480