WPF Anwendung über Button neu starten und Prozess nur einmal starten lassen

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von daniel.will.

    WPF Anwendung über Button neu starten und Prozess nur einmal starten lassen

    Hallo zusammen,

    ich schreibe gerade mein erstes Programm und erstelle hier mal meinen ersten Thread, da ich trotz vielem googlen einfach nicht das passende finde. Ich habe zwei unabhängige Fragen.

    1. Ich lasse den Anwendung über ein Textbox in den User Bereich von my.settings schreiben. Wenn ich dies richtig verstehe, wird dies nur neu geladen, wenn ich die Anwendung neu starte.
    Die funktioniert auch mit:

    VB.NET-Quellcode

    1. Process.Start(Application.ResourceAssembly.Location)
    2. Application.Current.Shutdown()



    Dafür brauch der User aber wohl Admin Rechte, ist das richtig?

    2. Viel wichtiger ist mir aber, das meine Anwendung / Prozess nur einmal ausgeführt wird. Dazu finde ich für meine WPF / XAML Anwendung irgendwie nichts im Netz :S

    Schon mal vielen Dank für eure Antworten.
    codelog.blogial.com/2009/05/24…nce-application-in-c-wpf/

    Sollte sich schnell auf VB.NET umschreiben lassen.
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.

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

    Lukas schrieb:

    codelog.blogial.com/2009/05/24…nce-application-in-c-wpf/

    Sollte sich schnell auf VB.NET umschreiben lassen.
    Hallo Lukas,

    für dich vielleicht ;) Ich komme da nicht so wirklich weiter, habe jetzt folgendes in "Application.xaml.vb:

    VB.NET-Quellcode

    1. Imports System.Threading.Mutex
    2. Class Application
    3. Private Sub Application_Startup(sender As Object, e As System.Windows.StartupEventArgs) Handles Me.Startup
    4. End Sub
    5. End Class

    picoflop schrieb:

    Hallo Picoflop,

    die von dir verlinkten Befehle kennt mein Programm nicht, außerdem kann ich bei "Anwendungsframwork aktivieren" den Haken entfernen. Es ist ein WPF Programm ohne Sub Main, sondern mit einer Start-URI.

    das ist mein letzter Stand, welcher aber zu keinem Ergebnis führt:

    VB.NET-Quellcode

    1. Class Application
    2. Public mymutex As New System.Threading.Mutex(False, "myownmutexmustbeunique")
    3. Public Sub Starten()
    4. If mymutex.WaitOne(TimeSpan.Zero, True) Then
    5. Application.Main()
    6. MainWindow.Activate()
    7. mymutex.ReleaseMutex()ElseMessageBox.Show("I is run already!") End If
    8. End SubEnd Class



    Das wird denke ich so nichts. :(

    daniel.will schrieb:

    Es ist ein WPF Programm ohne Sub Main

    Es geht um den Mutex ...
    Der ist systemweit und nicht an irgendwelche Settings etc gebunden. Du musst beim Programmstart nur checken, ob der Mutex reserviert ist und wenn ja, beendest du dein Programm wieder. Beim "normalen" beenden musst du halt nur den Mutex wieder freigeben.
    Das habe ich schon so verstanden.

    Du hast aber in deiner verlinkten Antwort geschrieben:
    In den Projekteigenschaften, dazu "Enable Application Framework" disablen und den Start auf Sub Main() setzen.
    Das kann ich aber nicht machen. Des Weiteren weiß ich nicht, was ich anstelle von:

    VB.NET-Quellcode

    1. Application.EnableVisualStyles()
    2. Application.Run(New Form1)


    einsetzten soll.

    Vielleicht stelle ich mich ja blöd an, aber ich bin ja im Grundlagen Forum ;)

    daniel.will schrieb:

    Vielleicht stelle ich mich ja blöd an

    Ja ... ;)

    Es geht NUR darum, dass du beim Programmstart den Mutex abfragst und ggf setzt und beim beenden wieder freigibst. Der verlinkte Post zeigt eine Möglichkeit für WinForms. Unter WPF geht es anders, aber im PRINZIP genauso. IRGENDWAS wird bei jedem Start einer WPF Anwendung ausgeführt -> da Mutex prüfen. IRGENDWAS wird beim beenden ausgeführt -> da Mutex freigeben
    Hallo Picoflop,

    danke für die Infos, ich habe jetzt noch ein bisschen suchen müssen, aber so geht es. In der "MainWindow.xaml.vb":

    VB.NET-Quellcode

    1. Private Sub Application_loaded(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded
    2. 'Prüfen ob nur ein Thread des Programms läuftDim mymutex As New System.Threading.Mutex(False, "Rechner12345")
    3. If mymutex.WaitOne(TimeSpan.Zero, True) Then
    4. Else
    5. MessageBox.Show("Der Rechner wurde bereits gestartet")
    6. Me.Close()
    7. End If
    8. 'Beim laden des Programms die Fensterposition aus der Benutzerkonfiguration laden.
    9. RibbonWindow.Left = My.Settings.Left
    10. RibbonWindow.Top = My.Settings.top