How can I prevent launching my app multiple times?

后端 未结 10 1861
北荒
北荒 2020-12-13 18:42

I deployed my C# WinForms application using ClickOnce installation. Everything works fine with it (after a lot of work) :), but now I\'m facing a problem:

Whenever

10条回答
  •  孤街浪徒
    2020-12-13 18:58

    solution in Windows form application Prohibit again run application(reopen application).

    1- first add Class RunAlready.cs

    2-Call method processIsRunning() with Name Process from RunAlready.cs in Program.cs

    Program.cs:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace Tirage.MainStand
    {
    static class Program
    {
    
        /// 
        /// The main entry point for the application.
        /// 
        [STAThread]
        static void Main()
        {
            PublicClass.Class.RunAlready RunAPP = new PublicClass.Class.RunAlready();
            string outApp = RunAPP.processIsRunning("Tirage.MainStand");
    
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            MainStand_FrmLogin fLogin = new MainStand_FrmLogin();
            if (outApp.Length == 0)
            {
    
                if (fLogin.ShowDialog() == DialogResult.OK)
                {
                    Application.Run(new MainStand_masterFrm());
    
                }
            }
            else MessageBox.Show( "Instance already running");
    
          }
        }
     }
    

    class RunAlready:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace PublicClass.Class
    {
      public  class RunAlready
        {
          public  string processIsRunning(string process)
            {
            string xdescription = "";
            System.Diagnostics.Process[] processes =
                System.Diagnostics.Process.GetProcessesByName(process);
            foreach (System.Diagnostics.Process proc in processes)
            {
                var iffffd = System.Diagnostics.Process.GetCurrentProcess().Id;
                if (proc.Id != System.Diagnostics.Process.GetCurrentProcess().Id)
                {
                    xdescription = "Application Run At time:" + proc.StartTime.ToString() + System.Environment.NewLine;
                    xdescription += "Current physical memory : " + proc.WorkingSet64.ToString() + System.Environment.NewLine;
                    xdescription += "Total processor time : " + proc.TotalProcessorTime.ToString() + System.Environment.NewLine;
                    xdescription += "Virtual memory size : " +         proc.VirtualMemorySize64.ToString() + System.Environment.NewLine;
                }
            }
    
    
            return xdescription;
        }
    }
    }
    

提交回复
热议问题