For a second time now, I've found myself needing to kill processes in my automated build scripts, so that was enough for me to automate it and wrap it up in a custom NAnt task. The first time I needed it, I just embedded the C# code inside a NAnt script block, but using it as "real" NAnt task is much nicer. And, perhaps I overlooked it, but I did not see a task in the set of NAnt or NAntContrib tasks to do this kind of simple operation and Google didn't turn up anything either. So I just banged it out real quick...
Here's how it can be used:
1: <loadtasks assembly="pathToToolsFolder\joeyDotNet.Commons.dll" />
2: <kill processName="w3wp" />
And for those that are interested, here's the code for the task, although it's really quite simple:
1: /// <summary>
2: /// Looks for processes with specified name and kills them
3: /// </summary>
4: [TaskName("kill")] 5: public class KillTask : Task
6: { 7: private string processName;
8:
9: [TaskAttribute("processName", Required = true), StringValidator(AllowEmpty = false)] 10: public string ProcessName
11: { 12: get { return processName; } 13: set { processName = value; } 14: }
15:
16: protected override void ExecuteTask()
17: { 18: Log(Level.Info, "Looking for processes named {0}...", processName); 19: foreach (Process process in Process.GetProcessesByName(processName))
20: { 21: Log(Level.Info, "Found process named {0}, killing...", processName); 22: process.Kill();
23: }
24: }
25: }
Disclaimer: I take no responsibility for what happens if try to pass in a process name like "System" or "winlogon" or "explorer". So please use wisely... :)
As usual, you can grab the source code yourself from the repository.