Определение собственного имени процесса в C # - PullRequest
4 голосов
/ 11 апреля 2011

Чтобы пользователь не мог запускать несколько экземпляров моего приложения, я использую этот код: -

 Process[] pArry = Process.GetProcesses();
           int nCount = 0;
           foreach (Process p in pArry)
           {
               string ProcessName = p.ProcessName;
               ProcessName = ProcessName.ToLower();
               if (ProcessName.CompareTo("myApp") == 0)
               {
                   nCount++;
               }
           }   
           if (nCount > 1)
           {
               MessageBox.Show(AppAlreadyRunning,"Error",MessageBoxButtons.OK,MessageBoxIcon.Error);
               Process.GetCurrentProcess().Kill();
           }

Но, как мы знаем, имя процесса изменяется, если изменить имя исполняемого файла.Поэтому, если пользователь изменит «myApp.exe» на «UserApp.exe», этот патч не будет работать!Есть ли выход?

Я использую C # в VS2010.Спасибо!

Ответы [ 3 ]

7 голосов
/ 11 апреля 2011

Это очень простой процесс. Вызов этой функции возвращает класс процесса со всей необходимой информацией.

Process.GetCurrentProcess()

Вот код для вас.

       Process[] pArry = Process.GetProcesses();
       foreach (Process p in pArry)
       {
           if (p.Id == Process.GetCurrentProcess().Id)
                continue;
           string ProcessName = p.ProcessName;
           if(ProcessName == Process.GetCurrentProcess().ProcessName)
           {
                MessageBox.Show(AppAlreadyRunning,"Error",MessageBoxButtons.OK,MessageBoxIcon.Error)
                SetForegroundWindow(p.MainWindowHandle);
                Application.Exit();
           }
       }   
4 голосов
/ 11 апреля 2011
1 голос
/ 11 апреля 2011

Бьюсь об заклад, вы можете использовать Process.GetCurrentProcess () (как вы делаете, чтобы убить процесс), чтобы получить реальное имя и использовать его для сравнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...