Quite easy to do with the Win32 API:
Code:
::CreateMutex(NULL, TRUE, "__my__app__single__instance__lock__"); //make sure that string is unique
if (::GetLastError() == ERROR_ALREADY_EXISTS)
{
printf("One instance of this program is already running");
return;
}
Should be easy to transpose to C#.
BTW, first hit on Google:
https://stackoverflow.com/questions/...app-in-c-sharp