i have a windows desktop application with c# and framework 4.6 the app run in system tray and there is a shortcut icon on desktop when user click the icon to run it if the app already run dont run new instance, only show (bring to front) existing app
public sealed class SingleInstance
{
    private const int SW_HIDE = 0;
    private const int SW_SHOW = 5;
    public static bool AlreadyRunning()
    {
        bool running = false;
        try
        {
            // Getting collection of process  
            Process currentProcess = Process.GetCurrentProcess();
            // Check with other process already running   
            foreach (var p in Process.GetProcesses())
            {
                if (p.Id != currentProcess.Id) // Check running process   
                {
                    if (p.ProcessName.Equals(currentProcess.ProcessName) == true)
                    {
                        running = true;
                        IntPtr hFound = p.MainWindowHandle;
                        if (User32API.IsIconic(hFound)) // If application is in ICONIC mode then  
                            User32API.ShowWindow(hFound, User32API.SW_RESTORE);
                        User32API.SetForegroundWindow(hFound); // Activate the window, if process is already running  
                        break;
                    }
                }
            }
        }
        catch { }
        return running;
    }
}
public class User32API
{
    [DllImport("User32.dll")]
    public static extern bool IsIconic(IntPtr hWnd);
    [DllImport("User32.dll")]
    public static extern bool SetForegroundWindow(IntPtr hWnd);
    [DllImport("User32.dll")]
    public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
    public const int SW_SHOW = 5;
    public const int SW_RESTORE = 9;
}
if app run back of the any windows it can show (bring to front) but it in system tray cant show
EDIT: minimize to tray
private void Form1_Resize(object sender, EventArgs e)
        {
            if (this.WindowState == FormWindowState.Minimized)
            {
                Hide();
            }
        }
to open
 private void notifyIcon1_Click(object sender, EventArgs e)
        {
            this.WindowState = FormWindowState.Minimized;
            this.Show();
            this.WindowState = FormWindowState.Normal;
        }
 
     
    