«сделать одно приложение», что это делает? - PullRequest
9 голосов
/ 25 августа 2009

в vb 2008 express эта опция доступна в свойствах приложения. Кто-нибудь знает, какова его функция? делает ли это так, что невозможно открыть два экземпляра одновременно?

Ответы [ 7 ]

19 голосов
/ 25 августа 2009

делает ли это так, что невозможно открыть два экземпляра одновременно?

Да.

11 голосов
/ 16 апреля 2013

Почему бы просто не использовать Mutex? Это то, что предлагает MS, и я использовал это в течение многих лет без проблем.

Public Class Form1
Private objMutex As System.Threading.Mutex
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    'Check to prevent running twice
    objMutex = New System.Threading.Mutex(False, "MyApplicationName")
    If objMutex.WaitOne(0, False) = False Then
        objMutex.Close()
        objMutex = Nothing
        MessageBox.Show("Another instance is already running!")
        End
    End If
    'If you get to this point it's frist instance

End Sub
End Class

Когда форма в этом случае закрывается, мьютекс освобождается, и вы можете открыть другую. Это работает, даже если ваше приложение вылетает.

11 голосов
/ 25 августа 2009

Да, делает невозможным , чтобы открыть два экземпляра одновременно.

Однако очень важно знать о ошибках . С некоторыми брандмауэрами невозможно открыть даже один экземпляр - ваше приложение падает при запуске! См. эту прекрасную статью Билла Маккарти для получения более подробной информации и техники для ограничения вашего приложения одним экземпляром. Его метод передачи аргумента командной строки из второго экземпляра обратно в первый экземпляр использует каналы в .NET 3.5.

3 голосов
/ 07 сентября 2017
    Dim _process() As Process
    _process = Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName)
    If _process.Length > 1 Then
        MsgBox("El programa ya está ejecutandose.", vbInformation)
        End
    End If
2 голосов
/ 25 августа 2009

Да, вы правы в том, что одновременно разрешено открывать только один экземпляр вашего приложения.

1 голос
/ 20 сентября 2015

Я нашел отличную статью по этой теме: Приложение с одним экземпляром в VB.NET .

Пример использования:

Module ModMain

    Private m_Handler As New SingleInstanceHandler()
    ' You should download codes for SingleInstaceHandler() class from:
    ' http://www.codeproject.com/Articles/3865/Single-Instance-Application-in-VB-NET

    Private m_MainForm As Form

    Public Sub Main(ByVal args() As String)
        AddHandler m_Handler.StartUpEvent, AddressOf StartUp ' Add the StartUp callback
        m_Handler.Run(args)
    End Sub

    Public Sub StartUp(ByVal sender As Object, ByVal event_args As StartUpEventArgs)
        If event_args.NewInstance Then ' This is the first instance, create the main form and addd the child forms
            m_MainForm = New Form()
            Application.Run(m_MainForm)
        Else ' This is coming from another instance
             ' Your codes and actions for next instances...
        End If
    End Sub

End Module
0 голосов
/ 10 октября 2013

Есть даже более простой метод:

Используйте следующий код ...

Imports System.IO

В событии загрузки основной формы выполните следующее:

If File.Exist(Application.StartupPath & "\abc.txt") Then
    'You can change the extension of the file to what ever you desire ex: dll, xyz etc.
    MsgBox("Only one Instance of the application is allowed!!!")
    Environment.Exit(0)
Else
    File.Create(Application.StartupPath & "\abc.txt", 10, Fileoptions.DeleteonClose)
Endif

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

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