Вы можете проверить существующие процессы до открытия формы:
using System.Diagnostics;
bool ApplicationAlreadyStarted()
{
return Process.GetProcessesByName(Process.GetCurrentProcess.ProcessName).Length == 0;
}
Я не знаю, если UAC или другие меры безопасности влияют на метод GetProcessesByName.