Prüfen ob Programm bereits gestartet ist

  • VB.NET
  • .NET (FX) 4.0

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Hackt3c.

    Prüfen ob Programm bereits gestartet ist

    Hallo Leute.

    Ich programmiere aktuell an der Star-CMD, mein eigenes Konsolen Projekt und versuche dort zu prüfen, ob es bereits gestartet ist.
    Ich habe hier bereits eine "Jein"-Lösung gefunden. Es hat zwar gefunden dass die Star-CMD bereits als Prozess da war. Hat aber nicht mit berechnet ob es 1, 2 oder mehr Prozesse sind.
    PS: Ich benutze Visual Basic 2010 Express und benutze für Star-CMD das .NET 4.0 Framework. ;)

    Könntet ihr mir helfen? <3

    Star-CMD Website


    2020 JeremyStar
    ===================
    JeremyStar™
    Gehirne sind sesam ༼ つ ◕◡◕ ༽つ
    staropensource.ddns.net/jstm/
    ===================
    Wenn Du mit dem Anwendungsframework arbeitest, dann in den Projekteinstellungen Einzelinstanzanwendung aktivieren. Ist das ne Konsolenapp oder WinForms oder was? Ansonsten Process.GetProcessesByName und dann Count
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    JeremyStar schrieb:

    ob es bereits gestartet ist.
    Meinst Du, das Programm versuchst festzustellen, ob Instanzen desselben Programmes unterwegs sind?
    Bei einem Consolen-Programm kannst Du leider keine SingleInstance-Anwendung erzeugen, wie @VaporiZed vorschlug, das geht erst ab WinForm.
    Wenn das also Dein Ziel ist, überlege, ob Du auf WinForm umsteigen solltest.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hi. Ich programmiere eine Console Application und ich kann nicht auf Windows Forms steigen da dann sogesagt mein ganzes Projekt abstürzt und selbst wenn ich wieder zurückschalte alles voll mit Fehlern ist. Das habe ich damals auch probiert von einer Console Application auf eine Windows Forms Application umzusteigen. Danach wie gesagt alles voller Fehler und selbst nachdem zurückschalten auf Konsolen Anwendung. Also kann ich es jetzt so verstehen dass es nicht geht oder wie? Und wenn es doch geht dann der Code von @VaporiZed?
    ===================
    JeremyStar™
    Gehirne sind sesam ༼ つ ◕◡◕ ༽つ
    staropensource.ddns.net/jstm/
    ===================
    Eine Möglichkeit, meinen Codevorschlag auszuformulieren:

    VB.NET-Quellcode

    1. Dim TargetFilePath = Diagnostics.Process.GetCurrentProcess.MainModule.FileName
    2. Dim CountOfProcessesLikeThisOne = 0
    3. For Each Process In Diagnostics.Process.GetProcesses
    4. Try
    5. If Process.MainModule.FileName = TargetFilePath Then CountOfProcessesLikeThisOne += 1
    6. Catch W32Ex As ComponentModel.Win32Exception
    7. 'Zugriff verweigert; kein passender Zielprozess
    8. End Try
    9. Next
    10. If CountOfProcessesLikeThisOne > 1 Then Console.WriteLine($"Es laufen bereits {CountOfProcessesLikeThisOne - 1} gleiche Prozesse.")

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    JeremyStar schrieb:

    mein ganzes Projekt abstürzt
    Dann wollen wir mal dafür sorgen, dass es nicht mehr so ist.
    Was für Fehler kommen da in welchen Codezeilen?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    JeremyStar schrieb:

    mein ganzes Projekt abstürzt
    Dann wollen wir mal dafür sorgen, dass es nicht mehr so ist.
    Was für Fehler kommen da in welchen Codezeilen?
    Da kommen mal so mal so Fehler. Liegt aber schon lange her, ca. 1 Jahr wo ich das getestet habe. Da habe ich erst angefangen und nun weiß ich es nicht mehr. Achja @VaporiZed, ich probiere mal deinen Code aus!

    @VaporiZed, ich habe deinen Code getestet. Er funktioniert gut außer dass er nicht zählt dass es mehr Prozesse sind.Mein Code:

    VB.NET-Quellcode

    1. Dim TargetFilePath = Diagnostics.Process.GetCurrentProcess.MainModule.FileName
    2. Dim CountOfProcessesLikeThisOne = 0
    3. For Each Process In Diagnostics.Process.GetProcesses
    4. Try
    5. If Process.MainModule.FileName = TargetFilePath Then CountOfProcessesLikeThisOne += 1
    6. Catch W32Ex As ComponentModel.Win32Exception
    7. Console.WriteLine("No another instances of " + My.Settings.ProjectName)
    8. Startup.Startup2()
    9. End Try
    10. Next
    11. If CountOfProcessesLikeThisOne > 1 Then Console.WriteLine("It's are already running instances of" + My.Settings.ProjectName)
    12. Startup.AlreadyOpened()
    ===================
    JeremyStar™
    Gehirne sind sesam ༼ つ ◕◡◕ ༽つ
    staropensource.ddns.net/jstm/
    ===================

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „JeremyStar“ ()

    JeremyStar schrieb:

    Er funktioniert gut außer dass er nicht zählt dass es mehr Prozesse sind.
    Da weiß ich nicht, was Du mir damit sagen willst. Er zählt doch. Oder meinst Du, dass das Programm die Anzahl der weiteren Programminstanzen nicht anzeigt? Musst Du schon selber machen bzw. coden, dass er CountOfProcessesLikeThisOne auch anzeigt.

    Keine Ahnung, was Zeile#8 und #12 bei Dir bewirken bzw. was da geschieht. Z#7 ist inhaltlich falsch. Die Ausnahme wird ausgelöst (und der Text angezeigt), wenn Du nicht die Berechtigung hast, auf den aktuellen Prozess in der Schleife zuzugreifen. Der Text, den Du da anzeigen lässt, ist damit falsch.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.