Я пытаюсь предотвратить запуск моей программы несколькими экземплярами в любой момент времени. Я читал об использовании мьютексов и событий Windows, однако оба потока были несколько лет, и мне любопытно, если с .net4 есть более простой и более элегантный способ справиться с этим? Я думал, что прочитал о настройке формы, которая позволила вам отказаться от нескольких экземпляров с помощью свойства? Может ли кто-то пролить свет на то, что самый безопасный и/или самый простой способ предотвратить несколько экземпляров программы?Что является самым безопасным способом предотвращения нескольких экземпляров программы?
ответ
Самый безопасный способ - использовать встроенную поддержку в .NET, свойство WindowsFormsApplicationBase.IsSingleInstance. Трудно догадаться, если это уместно, вы не приложили много усилий, описывая ваши точные потребности. И нет, ничего не изменилось за последние 5 лет. - Hans Passant 7 января в 0:38
Это был лучший ответ, но Ганс не представил его в качестве ответа.
В VB вы можете установить это на уровне проекта (Свойства> Общие) для проектов Winforms.
В C# вы можете использовать код, подобный этому .. необходимо преобразование конечно ..
Dim tGrantedMutexOwnership As Boolean = False
Dim tSingleInstanceMutex As Mutex = New Mutex(True, "MUTEX NAME HERE", tGrantedMutexOwnership)
If Not tGrantedMutexOwnership Then
'
' Application is already running, so shut down this instance
'
Else
'
' No other instances are running
'
End If
Упс, я забыл упомянуть, что вам нужно будет разместить GC.KeepAlive(tSingleInstanceMutex)
после Application.Run() вызов
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Windows.Forms;
namespace YourNameSpaceGoesHere
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
if (Process.GetProcessesByName("YourFriendlyProcessNameGoesHere").Length > 1)
{
MessageBox.Show(Application.ProductName + " already running!");
Application.ExitThread();
}
else
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new YourStartUpObjectFormNameGoesHere());
}
}
}
}
Хороший и чистый ответ! голосовать – Sylca
- 1. Что является самым безопасным способом делегирования ролей пользователей посредством разработки?
- 2. Что является самым безопасным способом хранения двухстороннего пароля?
- 3. Что является самым безопасным способом для удаления каталога в * nix?
- 4. Что является самым безопасным способом совместного использования объектов PHP
- 5. Что является самым безопасным способом внедрения веб-служб/API?
- 6. Что является самым безопасным способом передачи строк в C?
- 7. Что является самым эффективным способом отслеживания столкновений
- 8. Является ли FileStream самым безопасным способом копирования файла или файла.Copy?
- 9. Является ли это самым безопасным способом обработки формы PHP
- 10. Что является лучшим/безопасным способом переустановки Homebrew?
- 11. Что является самым простым способом отслеживать результаты?
- 12. Что является самым быстрым способом раздела данных
- 13. Что является самым быстрым способом проверки типа?
- 14. Что является самым элегантным способом комбинирования опций?
- 15. Перечислить границы - что является самым питоническим способом?
- 16. Что является самым простым самым элегантным способом использования настраиваемого атрибута
- 17. Что является самым безопасным способом привязки данных к элементу в другом файле xaml в WPF
- 18. Как избежать нескольких экземпляров программы?
- 19. Что является самым безопасным способом в ColdFusion для удаления папки и ее содержимого?
- 20. Что является самым безопасным способом конвертировать очищенные URL-адреса в реальные URL-адреса?
- 21. Что является самым безопасным способом обработки данных в базе данных mysql
- 22. Что является самым безопасным способом создания файла cookie «Оставайтесь в системе»?
- 23. Что является самым безопасным способом шифрования файла с помощью конфиденциальных данных?
- 24. Что является самым безопасным способом выделения и освобождения памяти в C?
- 25. Что является самым безопасным способом защиты документа Word от редактирования и копирования
- 26. Что является самым безопасным способом передачи аргументов с серверного PHP на клиентский JavaScript
- 27. Что является самым безопасным способом извлечения <title> из файла HTML с использованием xpath?
- 28. Что является самым безопасным способом подключения веб-приложения ASP.NET 3.5 и базы данных SQL Server?
- 29. Что является самым безопасным и чистым способом отправки данных с контроллера для просмотра?
- 30. Что является самым безопасным способом объединить 2 строки таблицы в SQL Server?
Самый безопасный способ - использовать встроенную поддержку в .NET, свойство WindowsFormsApplicationBase.IsSingleInstance. Трудно догадаться, если это уместно, вы не приложили много усилий, описывая ваши точные потребности. И нет, ничего не изменилось за последние 5 лет. –
Создайте именованное событие. Посмотрите на то, как это сделать [здесь] [1] [1]: http://stackoverflow.com/questions/447546/creating-win32-events-from-c-sharp – Odys
Hans если вы сделаете этот комментарий фактическим ответом, я дам вам выбранный ответ. –