Другие языки программирования и технологии

C#, запуск второй копии программы

Объясните как сделать: запущено приложение (свернуто в трей) , пользователь пытается открыть ярлык программы (запустить вторую копию программы) вместо этого должно всплыть первое запущенное приложение, а вторая копия программы не запускалась.
IM
Islam Maksatbekov
1 826
static class Program {
    [STAThread]

    [System.Runtime.InteropServices.DllImport("user32.dll")]
    [return: System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.Bool)]
    static extern bool SetForegroundWindow(IntPtr hWnd);

    [System.Runtime.InteropServices.DllImport("user32.dll")]
    [return: System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.Bool)]
    static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

    static void Main() {
        bool isNotRunning = true;
        using (var mutex = new System.Threading.Mutex(true, "МояПрограмма", out isNotRunning)) {
            if (isNotRunning) {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new Form1());
            } else {
                var curr = System.Diagnostics.Process.GetCurrentProcess();
                foreach (var proc in System.Diagnostics.Process.GetProcessesByName(curr.ProcessName)) {
                    if (proc.Id != curr.Id) {
                        ShowWindow(proc.MainWindowHandle, 9);
                        ShowWindow(proc.MainWindowHandle, 5);
                        SetForegroundWindow(proc.MainWindowHandle);
                    }
                }
            }
        }
    }
}
FA
Farid Asmandiyrov
82 361
Лучший ответ
При запуске проверять, есть ли уже процесс с таким же именем, если есть то делать его активным и выход из текущего приложения.