Single Instance ohne Application Framework

  • VB.NET

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von m477h35.

    Single Instance ohne Application Framework

    Hallo!
    Erstmal, schönes Forum hier ;)

    Ich würde gern ne Single Instance Application haben, aber auch meine eigene Start-Methode (Sub Main) haben. Dazu hab ich auch schon den Trick angewandt (>>Klick<< ), der soweit auch funktioniert. Nur anstatt ne MsgBox auszugeben, wenn bereits eine Instanz läuft, würde ich die laufende Instanz sowie die gerade gestartete beenden. Sprich: Erstes mal Doppelklick auf Programm-exe: Programm starten, 2. mal Doppelklick: Programm beeden.
    Hat jemand eine Idee?

    m477h35
    würde mich auch interessieren, hab ich auch noch keine löung gefunden (wusste auch im forum keiner).
    es ist aber möglich, beim programmstart zu überprüfen ob derselbe prozess schon läuft, wenn ja dann könntest du diesen prozess ja killen.
    was mich jedoch interessieren würde: wenn das programm nochmal gestartet wird, soll es nicht nochmal geöffnet werden, sondern die erste instanz - z.b. bei einer application im tray, dass diese dann geöffnet wird wenn das programm nochmal gestartet wird. hat irgendwer eine ahnung, wie ich der "anderen" instanz sagen kann, dass sie aufegrufen werden soll?
    Genauso hab ichs bis jetzt gelöst ;)

    VB.NET-Quellcode

    1. Public Sub Main()
    2. If mymutex.WaitOne(TimeSpan.Zero, True) Then
    3. Application.EnableVisualStyles()
    4. mymutex.ReleaseMutex()
    5. If My.Application.CommandLineArgs.IndexOf("-config") <> -1 Then
    6. Application.Run(Form_Config)
    7. Else
    8. Application.Run(Form_Main)
    9. End If
    10. Else
    11. Dim processes() As Process
    12. processes = Process.GetProcessesByName("ToggleInputDevices")
    13. For Each pc As Process In processes
    14. If pc.Id <> Process.GetCurrentProcess.Id Then
    15. pc.CloseMainWindow()
    16. End If
    17. Next
    18. Application.Exit()
    19. End If
    20. End Sub


    Aber das scheint mir doch ein bisschen "unschön" - sag ich mal.

    m477h35

    edit: Prozess aktivieren:
    Vielleicht so:

    VB.NET-Quellcode

    1. Declare Function BringWindowToTop Lib "user32.dll" (ByVal hwnd As IntPtr) As IntPtr
    2. [...]
    3. BringWindowToTop(pc.Handle)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „m477h35“ ()