Tfs post-build step running application hangs

2019-09-02 05:31发布

问题:

We have a configured TFS CI which is making our build. After a build I`d like to have my simple executable application to be deployed to specific folder on the server and then started.

I decided to do this with post-build step and batch script. Everything works perfectly except one:

when the application is stared, build agent(the one who runs my script) hangs.

Here is how I start my application from the script:

start /b %depldir%\MyApp.exe [params] > log.txt

So I start it in backgroound and redirect std out/error to file.

Application is started correctly but build process won`t finish untill I kill the application.

How do I start my application without build agent waiting for it to finish?

回答1:

I'm not sure if this is a bug but if you use start /b something > logfile.txt the new and hidden cmd window is started with parameter /k. This forces the hidden window to stay active. This makes the calling bat wait for it to exit and this is why your build won't terminate. To verify this I've created two files:

starter.bat:

start /b tostart.bat > log.txt

tostart.bat:

echo started

When I start starter.bat the cmd doesn't terminate and in the task manager the following process appears:

cmd.exe USER 00 00:00:00 1.400k C:\Windows\system32\cmd.exe /K tostart.bat

/K means:

/K Run Command and then return to the CMD prompt. This is useful for testing, to examine variables (taken from http://ss64.com/nt/cmd.html)

To cut a long story short: it works fine when you replace start /b with call. Unfortunately call doesn't have a parameter like /b so your application won't start in background. I don't know whether this is a problem for you.

If it is: I've faced similar problems with my Jenkins build server. My solution was to create a task which runs my application (in background). Instead of calling the program itself I just call SCHTASKS /Run /TN "TASK_NAME". This command just triggers the task without waiting. This way you can also avoid problems with permissions etc.