Windowsshell ersetzen

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Maltur.

    Windowsshell ersetzen

    Hallo zusammen,

    ich hoffe Ihr könnt mir da etwas weiterhelfen.
    Ich habe mir ein kleines Programm gebastelt, das per Buttonklick die Windowsshell gegen meine Eigene austauscht.
    Nun zu meinem Problem, wenn ich das Programm mit Adminrechte starte, funktioniert es ganz gut, nun soll das Programm normal starten ohne Adminrechte, und wenn ich dann den besagte Button klicke, soll das Programm / Code den Registryeintrag mit Adminrechte ändern.
    Und hier ist auch schon mein Problem, ich habe viel im Internet gesucht und auch einiges gefunden, aber es funktioniert einfach nicht.

    Hier der Code, das funktioniert, wenn man das Programm mit Adminrechte startet.

    Quellcode

    1. Sub NewShell()
    2. Dim key As RegistryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", True)
    3. key.SetValue("shell", "meine_eigene_shell")
    4. End Sub
    Funktioniert nicht.

    If your application needs to perform an administrative task, and it
    usually runs non-elevated, you have to create another .exe which will
    request elevation with its manifest. To start a process elevated, you
    have to use ShellExecute or ShellExecuteEx function. From your main process you will need a way to pass the commands to that new process that will run elevated.

    Requesting administrator privileges at run time
    Designing UAC Applications for Windows Vista
    @Maltur Gibt es Gründe, Dein Programm ohne Admin-Rechte zu starten?
    Ansonsten belass es dabei.
    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!
    Hallo RodFromGermany,

    nun das Programm ist die neue Shell, der Gedanke war, das mein Programm als Shell starten soll, dort in den Programmoptionen soll dann eine Möglichkeit (Button) geben, die die Standardshell wieder einzutragen, also explorer.exe.
    Das ist mein Dilemma, die Shell (mein Programm) startet in diesem Fall ohne Adminrechte und kann dann deswegen den Shelleintrag in der Registry nicht setzen.
    Das ist der Grund, warum ich gefragt habe. Bin für jeden alternativen Vorschlag offen.
    @Maltur Dann mach Dir ein separates Programm mit Admin-Rechten, das den Registry-Eintrag setzt und starte dann Deine Shell.
    Die musst Du separat starten!
    Wenn Du das per Process.Start() machst, übernimmt es die Admin-Rechte des aufrufenden Programms.
    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!
    Hallo RodFromGermany,

    das mit den zwei Programmen war eine super Idee, leider hat es nicht ganz so funktioniert, wie du das beschrieben hast oder ich habe es schlicht nicht verstanden.
    Aber ich habe es einfach anders rum gebaut, die Shell startet nun ganz normal, also ohne Adminrechte und von dort aus starte ich bei bedarf das zweite Registry Konfigurationsprogramm, das automatisch im Adminmodus startet (Manifestdatei angepasst). Das ist dann völlig in Ordnung, da die Konfiguration sowieso der Admin durchzuführen hat.

    Ist zwar nicht die eleganteste Art, aber es funktioniert.

    Vielen Dank für diesen Vorschlag.

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