C#只启动一个进程

保证软件只运行一次还是很有必要的,方法也很简单,只要判断进程中有无当前的进程名就可以了。
对于WPF的软件,在App.XAML.cs中判断。重写OnStartup方法就可以了。
 
[csharp]  
public partial class App : Application  
  {  
      /// <summary>   
      /// 只打开一个进程   
      /// </summary>   
      /// <param name="e"></param>   
      protected override void OnStartup(StartupEventArgs e)  
      {  
          Process currentProcess = Process.GetCurrentProcess();  
  
          foreach (Process item in Process.GetProcessesByName(currentProcess.ProcessName))  
          {  
              if (item.Id != currentProcess.Id &&   
              (item.StartTime - currentProcess.StartTime).TotalMilliseconds <= 0)  
              {  
                  item.Kill();  
  
                  item.WaitForExit();  
  
                  break;  
              }  
          }  
  
          base.OnStartup(e);  
      }  
  }  
 
  public partial class App : Application
    {
        /// <summary>
        /// 只打开一个进程
        /// </summary>
        /// <param name="e"></param>
        protected override void OnStartup(StartupEventArgs e)
        {
            Process currentProcess = Process.GetCurrentProcess();
 
            foreach (Process item in Process.GetProcessesByName(currentProcess.ProcessName))
            {
                if (item.Id != currentProcess.Id && 
                (item.StartTime - currentProcess.StartTime).TotalMilliseconds <= 0)
                {
                    item.Kill();
 
                    item.WaitForExit();
 
                    break;
                }
            }
 
            base.OnStartup(e);
        }
    }对于Winform的则直接在主窗体的构造其中判断。
 
[csharp]  
public partial class Form1 : Form  
   {  
       public Form1()  
       {  
           InitializeComponent();  
  
           StartUp();  
       }  
  
       private void StartUp()  
       {  
           Process currentProcess = Process.GetCurrentProcess();  
  
           foreach (Process item in Process.GetProcessesByName(currentProcess.ProcessName))  
           {  
               if (item.Id != currentProcess.Id &&   
               (item.StartTime - currentProcess.StartTime).TotalMilliseconds <= 0)  
               {  
                   item.Kill();  
  
                   item.WaitForExit();  
  
                   break;  
               }  
           }  
       }  
   }  
 
 public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
 
            StartUp();
        }
 
        private void StartUp()
        {
            Process currentProcess = Process.GetCurrentProcess();
 
            foreach (Process item in Process.GetProcessesByName(currentProcess.ProcessName))
            {
                if (item.Id != currentProcess.Id && 
                (item.StartTime - currentProcess.StartTime).TotalMilliseconds <= 0)
                {
                    item.Kill();
 
                    item.WaitForExit();
 
                    break;
                }
            }
        }
    }简单的代码就可以完成这个功能。
 
 
 
追加部分:
 
如果想做的更严格一些,可以根据进程名的路径来判断:
 
[csharp]   www.2cto.com
Process[] sameProcess = Process.GetProcessesByName  
    (Path.GetFileNameWithoutExtension(AppDomain.CurrentDomain.BaseDirectory + currentProcess.ProcessName));  
if (sameProcess != null && sameProcess.Length > 0)  
{  
    //这里表示是重复的进程   
    }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值