Thanks for your responses.

I tried the second method suggested by Shuja Ali but the

if (siMutex.WaitOne(0, false))

causes the app to throw a "has encountered a problem and needs to close"

any ideas why?

Does it matter if my main is declared as such:

[MTAThread]
static void Main(string[] args)
{