You don't say if you're using .net 1.1 or 2.0, which does make a difference.
In .net 2.0 (using visual studios) there is a check box (under "Application") to sent your program to Single Instance. This isn't a perfect solution, as if you try to open multiple instances before the first instance is up, it will cause the program to crash. Also, this requires you to do some fancy work to pass the arguements after the program has started.
In .net 1.x you have to use a mutex and (if I recall right) use the windows API to send data back and forth. For more on that, check this page out:
http://www.codeproject.com/vb/net/singleinstance.asp
I happen to have examples of both methods, as I have used both for my open source media player, called
GAmp. For the .net 2.0 method, look at my GAmp 2.0 release, and for the .net 1.x method, look at my 1.0 release.