How do I start a background task from a VisualStudio post-build event?

background-process, msbuild, post-build-event, visual-studio-2010

Solution

Not sure why exactly start doesn't do the trick (works perfectly from the command line), but afaik msbuild spawns a seperate cmd process for it's build events so it will have something to do with that.

A working alternative is to use Powershell to start the process instead. No idea about the builtin powershell syntax, but invoking C#'s Process.Start works just as fine:

powershell -Command "[System.Diagnostics.Process]::Start( '/path/to/node', 'args' )"

That answers your question, however I think it's not what you really want, and you're asking the wrong question.. You say you want to 'start an instance whenever a particular project is run from VisualStudio', but then you go on asking about build events which occur when a project is built. That is different and seems unhandy since every single build will start a new instance. Instead, I think what you actually want/need is to start an instance everytime you start debugging your project. That's also possible as laid out here:

- add an empty project to your solution

- enter your node command under the projects' `Properties->Debugging`

- right-click solution, select `Set Startup Project`

- select `Multiple startup projects`

- set `Action` to `Start` for your main project

- set `Action` to `Start without debugging` for the empty project

Now hit F5 and VS will start node, plus start debugging your project.

Problem

I'm trying to start an instance of grunt watch whenever a particular project is run from VisualStudio. I have a single page-app written in ember, and compiled with grunt, which connects to a backend written with WebAPI. I'm trying to reduce friction so it's possible to Start Debugging (F5) in VS and have it get everything up and going. If I add a post-build event to compile the app with grunt, it works fine: ``` node node_modules\grunt-cli\bin\grunt dev --no-color ``` `grunt watch` never terminates, so the VisualStudio build appears to hang until you terminate the node.exe process (which is mostly expected, other than not being able to use Ctrl+Break to stop in VS): ``` node ../node_modules\grunt-cli\bin\grunt watch --no-color ``` I've tried starting with the `start` command, but VisualStudio still waits for it to exit (just saying "Build started..."): ``` start node ../node_modules\grunt-cli\bin\grunt dev --no-color ``` I've also tried with start's `/i` parameter, but that doesn't help. It opens a new window running `grunt watch`, but the build doesn't continue (and the app doesn't start) until I close the console window. Presumably this has something to do with the process being a child of the build process? Is there an actual way to start a background task without VisualStudio waiting on it?

Original source