Nach Explorer Neustart bleibt Desktop Dunkel...

  • VB.NET
  • .NET 4.5

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von FormFollowsFunction.

    Nach Explorer Neustart bleibt Desktop Dunkel...

    Hallo Forum.

    Damit die Registry neu gelesen werden soll, lasse ich Explorer Beenden und nochmal Starten.

    Mit diesem Code klappt das auch, allerdings bleibt der Desktop schwarz.

    VB.NET-Quellcode

    1. Dim p As New Process
    2. p.StartInfo.FileName = "cmd.exe"
    3. p.StartInfo.Arguments = " /c taskkill.exe /f /im explorer.exe & explorer.exe"
    4. p.Start()


    Ich muss Explorer jedesmal manuell starten.
    Auch ein Bat Datei mit dem Inhalt:
    taskkill /f /im "explorer.exe"
    start explorer.exe

    Starten lassen ergibt das gleiche effect.

    Starte ich die Bat Datei Manuell, funktioniert alles wunderbar. (Desktop bleibt NICHT Dunkel)

    Kann mir jemand Helfen?
    @bigdaddy0751 Willkommen im Forum.
    Es sieht mir so aus, als ob das ein Timing-Problem ist.
    Der Neustart des Explorers erfolgt zu früh,
    das System meint wohl, dass der Explorer (noch) läuft und ignoriert den Neustart.
    Kann man da iwo ne Pause einbauen?
    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).
    VB-Fragen über PN / Konversation werden ignoriert!
    Hallo @RodFromGermany. Danke für deine Interesse und Willkommen

    Den Code habe ich folgendermaßen geändert

    VB.NET-Quellcode

    1. Dim p As New Process
    2. p.StartInfo.FileName = "cmd.exe"
    3. 'Explorer Beenden
    4. p.StartInfo.Arguments = " /c taskkill.exe /f /im explorer.exe"
    5. p.Start()
    6. 'Pause
    7. System.Threading.Thread.Sleep(2000)
    8. 'Explorer Starten
    9. Process.Start("explorer.exe", ",")


    Aber leider gleiches Effekt.

    Eigentlich Funktioniert das ganze ja, sprich:
    > Explorer wird Beendet
    > Somit Registry wird neu gelesen
    > Explorer wird neu gestartet. (Es öffnet "Dieser PC" Ordner.
    Nur im Hintergrund alles Schwarz (Ich muss nochmal Manuell "Explorer" eingeben, und dann ist Desktop wieder aufgebaut.

    Komischerweise wenn ich die BAT Datei Manuell ausführe (Wo auch keine Pause eingebaut ist) Funktioniert das ganze tadellos und Desktop wird ganz normal aufgebaut.

    Falls Interesse besteht, warum das ganze passieren soll:
    Ich habe eine kleine Tool Programmiert, wo der Benutzer in Sekunden eingeben kann, in wie viel Sekunden das Hintergrund-Bild gewechselt wird.
    Weil in Windows 10 minimal 1 Minute eingestellt werden kann.
    Soweit alles klar. Nun muss ja das Registry neu gelesen werden, damit man den Rechner nur deswegen nicht neu Starten muss.

    Danke Nochmals
    @bigdaddy0751 Das ist vergebliche Lebensmüh, denn die Befehlskette steht in der Zeile

    VB.NET-Quellcode

    1. p.StartInfo.Arguments = " /c taskkill.exe /f /im explorer.exe"
    Da müsste eine entsprechende Kennung rein.
    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).
    VB-Fragen über PN / Konversation werden ignoriert!
    Man kann es drehen wie man will.

    Auch dieser Code tut es:

    VB.NET-Quellcode

    1. Shell("C:\Windows\System32\cmd.exe /c taskkill.exe /f /im explorer.exe")
    2. System.Threading.Thread.Sleep(2000)
    3. Process.Start("explorer.exe", ",")


    oder so:

    VB.NET-Quellcode

    1. Shell("C:\Windows\System32\cmd.exe /c taskkill.exe /f /im explorer.exe")
    2. System.Threading.Thread.Sleep(2000)
    3. Shell("explorer.exe")


    Die Pause spielt keine Rolle.

    Nur gleiches Effekt >>> Bildschirm Dunkel >>> Explorer muss Manuell gestartet werden.

    Wie könnte ich das Registry anderweitig neu lesen lassen?

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

    @bigdaddy0751 Warum jetzt Shell?
    Probierma:
    Form mit 2 Button und den ersten Befehl in die Button1_Click und den zweiten Befehl in die Button2_Click.
    Warte mit dem 2. Klick ein Weilchen.
    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).
    VB-Fragen über PN / Konversation werden ignoriert!
    @bigdaddy0751 Tut mir leid, da muss ich leider das Handtuch werfen. ;(
    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).
    VB-Fragen über PN / Konversation werden ignoriert!
    Lösung gefunden.

    Nach dem ich fleißig weiter gesucht habe, bin ich auf folgendes gestoßen.

    VB.NET-Quellcode

    1. ​Process.Start(Environment.GetFolderPath(Environment.SpecialFolder.Windows) + "\explorer.exe")


    Resultat: Es Funktioniert.

    @RodFromGermany Vielen Dank nochmals für deine Interesse.


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

    Pfade besser mit Path.Combine erzeugen.

    Und anstatt den Explorer abzuwürgen und neuzustarten, kann man ihn auch aktualisieren.

    VB.NET-Quellcode

    1. <System.Runtime.InteropServices.DllImport("Shell32.dll")>
    2. Private Shared Function SHChangeNotify(eventId As Integer, flags As Integer, item1 As IntPtr, item2 As IntPtr) As Integer
    3. End Function
    4. Private Sub RefreshExplorer()
    5. SHChangeNotify(&H8000000, &H1000, IntPtr.Zero, IntPtr.Zero)
    6. End Sub