Предотвратить несколько экземпляров данного приложения в.NET?

Вы уже принимаете входные данные как целое число, поэтому не работайте со строками. Я рекомендую использовать этот цикл;

    Scanner number = new Scanner(System.in);

    System.out.print("Even Numbers: ");
    for (int i = 0; i <= number; i=i+2) {
     System.out.print(i);
    }

    System.out.println("");

    System.out.print("Odd Numbers: ");
    for (int i = 1; i <= number; i=i+2) {
     System.out.print(i);
    }
121
задан C. Dragon 76 18 September 2008 в 16:08
поделиться

13 ответов

Используйте Взаимное исключение. Один из примеров выше использования GetProcessByName имеет много протестов. Вот хорошая статья о предмете:

http://odetocode.com/Blogs/scott/archive/2004/08/20/401.aspx

[STAThread]
static void Main() 
{
   using(Mutex mutex = new Mutex(false, "Global\\" + appGuid))
   {
      if(!mutex.WaitOne(0, false))
      {
         MessageBox.Show("Instance already running");
         return;
      }

      Application.Run(new Form1());
   }
}

private static string appGuid = "c0a76b5a-12ab-45c5-b9d9-d693faa6e7b9";
148
ответ дан 24 November 2019 в 01:31
поделиться

Hanselman имеет сообщение при использовании класса WinFormsApplicationBase от Microsoft. Блок VisualBasic, чтобы сделать это.

7
ответ дан 24 November 2019 в 01:31
поделиться
if (Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName).Length > 1)
{
  AppLog.Write("Application XXXX already running. Only one instance of this application is allowed", AppLog.LogMessageType.Warn);
  return;
}
19
ответ дан 24 November 2019 в 01:31
поделиться

Вот код, необходимо удостовериться, что только один экземпляр работает. Это - метод использования именованного взаимного исключения.

public class Program
{
    static System.Threading.Mutex singleton = new Mutex(true, "My App Name");

    static void Main(string[] args)
    {
        if (!singleton.WaitOne(TimeSpan.Zero, true))
        {
            //there is already another instance running!
            Application.Exit();
        }
    }
}
18
ответ дан 24 November 2019 в 01:31
поделиться

Необходимо использовать Систему. Диагностика. Процесс.

Выезд: http://www.devx.com/tips/Tip/20044

1
ответ дан 24 November 2019 в 01:31
поделиться
[STAThread]
static void Main()                  // args are OK here, of course
{
    bool ok;
    m = new System.Threading.Mutex(true, "YourNameHere", out ok);

    if (! ok)
    {
        MessageBox.Show("Another instance is already running.");
        return;
    }

    Application.Run(new Form1());   // or whatever was there

    GC.KeepAlive(m);                // important!
}

От: Обеспечение единственного экземпляра Приложения

.NET и: Единственное Взаимное исключение Приложения Экземпляра

Тот же ответ как @Smink и @Imjustpondering со скручиванием:

FAQ Jon Skeet на C# для обнаружения, почему вопросы GC.KeepAlive

1
ответ дан 24 November 2019 в 01:31
поделиться

Обычно это сделано с именованным Взаимным исключением (используйте новое Взаимное исключение ("Ваше название приложения", верный), и проверьте возвращаемое значение), но существуют также некоторые классы поддержки в Microsoft.VisualBasic.dll, который может сделать это для Вас .

0
ответ дан 24 November 2019 в 01:31
поделиться

Используйте VB.NET! Нет: действительно ;)

использование Microsoft. VisualBasic. ApplicationServices;

WindowsFormsApplicationBase от VB.Net предоставляет Вам Свойство "SingleInstace", которое определяет другие Экземпляры, и позвольте только одному выполненному Экземпляру.

2
ответ дан 24 November 2019 в 01:31
поделиться

Эта статья просто объясняет, как можно создать приложение Windows с управлением на количестве его экземпляров или выполнить только единственный экземпляр. Это - очень типичная потребность бизнес-приложения. Уже существует много других возможных решений управлять этим.

http://www.openwinforms.com/single_instance_application.html

2
ответ дан 24 November 2019 в 01:31
поделиться

http://en.csharp-online.net/Application_Architecture_in_Windows_Forms_2.0 —, Единственный-Instance_Detection_and_Management

3
ответ дан 24 November 2019 в 01:31
поделиться

Используя Visual Studio 2005 или 2008 при создании проекта для исполняемого файла на окнах свойств в панели "Application" существуют флажок по имени единственный экземпляр “Make application”, что можно активироваться для преобразования приложения на единственном приложении экземпляра.

Вот получение окна, о котором я говорю: enter image description here Это - проект приложения Windows Visual Studio 2008 года.

4
ответ дан 24 November 2019 в 01:31
поделиться

Это кажется, что существует 3 фундаментальных метода, которые были предложены до сих пор.

  1. Происходят из Microsoft. VisualBasic. ApplicationServices. Класс WindowsFormsApplicationBase и набор свойство IsSingleInstance к истинному. (Я полагаю, что протест вот состоит в том, что это не будет работать с приложениями WPF, не так ли?)
  2. Использование именованное взаимное исключение и проверка, если это было уже создано.
  3. Получают список выполнения процессов и сравнивают названия процессов. (Это имеет протест требования, чтобы Ваше имя процесса было уникально относительно любых других процессов, работающих на машине данного пользователя.)

Какие-либо протесты я отсутствовал?

5
ответ дан 24 November 2019 в 01:31
поделиться