Thomas Woelfers Baustatik Blog

Baustatik-Software und was sonst des Weges kommt

Windows Explorer durch ein anderes Programm ersetzen

Ich musste heute für einen bestimmten Account die normale Windows Shell (Explorer.exe) durch ein anderes Programm ersetzen. Das Verhalten sollte dabei derart sein, das beim beenden dieses anderen Programmes der Account direkt abgemeldet wird.

Zunächst braucht man dazu ein kleines Programm, das die "eigentliche" Shell startet, darauf wartet das der Shell-Prozess beendet wird, und dann den Abmeldevorgang einleitet. Sowas kann man zum Beipiel als Skript anlegen:

REM Starten
StartProcessAndWait "ZuStartendesProgramm.exe"

REM Abmelden
Set oOS = GetObject("winmgmts:{(Shutdown)}").ExecQuery("Select * from Win32_OperatingSystem")
For Each oOperatingSystem in oOS
   oOperatingSystem.Win32Shutdown(4)
Next

Function StartProcessAndWait( processName)
   Set objWMIService = GetObject("winmgmts:\\.\root\cimv2:Win32_Process")
   errResult = objWMIService.Create("C:\temp\" & processName, "C:\temp\", null, intPosID)
   Set objWait = GetObject("winmgmts:\\.\root\cimv2")
   Set colProcesses = objWait.ExecNotificationQuery("Select * From __InstanceDeletionEvent " & "Within 1 Where TargetInstance ISA 'Win32_Process'")
   mustWait = true
   Do while mustWait
      Set objProcess = colProcesses.NextEvent
      If objProcess.TargetInstance.ProcessID = intPosID Then
          mustWait = false
      End If
   Loop
   StartProcessAndWait = true
End Function

Jetzt braucht man nur noch einen Eintrag in der Registry, der sich darum kümmert, das dieses Skript (nennen wir es "shell.vbs") startet. Der findet sich unter

HKEY_CURRENT_USER\Software\Microsoft\WindowsNT\CurrentVersion\Winlogon

Der Key hat den Namen "Shell" und als Wert (für dieses Beispiel) "cscript c:\temp\shell.vbs"

Comments (3) -

  • bjanko

    1/18/2008 9:25:12 AM |

    Hallo Thomas,

    Ein sehr hilfreicher Eintrag. Ich suche Informationen zur folgenden Problemlösung:
    ist es möglich einen Benutzer xy eine eigene shell zuzordnen und dem Administrator trotdem den explorer.exe? Wenn ja, welchen Registry schlüssel sollte man anpassen?

    Schöne grüsse
    bjanko

  • Thomas Woelfer

    1/18/2008 9:36:15 AM |

    Wenn man es so tut wie ich es beschrieben habe, dann erhlt der user der angemeldet ist, wenn man den letzten arbeitsschritt durchführt die neue shell: andere user behalten die normale.

  • simple

    12/24/2009 12:11:37 AM |

    das script geht ein bisserl einfacher mit einer .bat datei:
    @echo off
    ZuStartendesProgramm.exe
    logoff /n

    woran ich mir aber gerade die zähne ausbeisse ist selbiges für das GASTkonto, nur das hinterher nicht ausgeloggt werden soll sondern HERUNTERGEFAHREN werden soll.
    ich war in der hoffnung mit deinem script geht das, aber da fehlt mir noch was.
    kann mir wer weiterhelfen?

Comments are closed