Registry.SetValue mit Admin-Rechten?

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

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von dive26.

    Registry.SetValue mit Admin-Rechten?

    Hallo liebe Leute,

    ich stehe vor dem Problem, dass ich einen Registry-Wert ändern muss:

    VB.NET-Quellcode

    1. Registry.SetValue("HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager\Power", "HiberbootEnabled", 0)


    Dies funktioniert einwandfrei, wenn die Anwendung mit der Rechten Maustaste mit "Als Administrator starten" gestartet wird.
    Beim "normalen" Aufruf schlägt das Schreiben fehl.

    Wie schaffe ich es im Programmablaub nach der "Admin-Berechtigung" über den gewohnten Windows-Dialog zu fragen um dann denn Key setzen zu können?

    LG Roland
    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at
    Danke für den Link.
    Jedoch weiß ich nicht ob das mit dem Manifest bewirkt, dass bei jedem Programmstart Adminrechte abgefragt werden. Das möchte ich nicht.

    Ich möchte nur wenn erforderlich für das schreiben der Registry die Admin-Berechtigung setzen und nicht die ganze Software dauerhaft in Adminmodus laufen lassen.

    Die Variante mit Process.start und "runas" zum Starten einer zweiten Instanz kommt aus anderen ablauftechnischen Gründen leider auch nicht in Frage.

    Kann ich eventuell diesen Registry-Key irgendwie über die Commandozeile setzen?
    Denn ein externes Programm könnte ich mit Adminrechte starten.

    Beispiel oder so ähnlich:

    VB.NET-Quellcode

    1. Dim myprocess As System.Diagnostics.Process = New System.Diagnostics.Process()
    2. With myprocess.StartInfo
    3. .FileName = ("RegistryAendern.exe")
    4. .CreateNoWindow = False
    5. .Arguments = "hier der key bzw. die Parameter"
    6. .RedirectStandardInput = False
    7. .RedirectStandardOutput = False
    8. .RedirectStandardError = False
    9. .UseShellExecute = True
    10. .Verb = "runas"
    11. End With
    12. myprocess.Start()
    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at
    Vielen Dank, so habe ich es jetzt auch gemacht:

    VB.NET-Quellcode

    1. Dim myprocess As System.Diagnostics.Process = New System.Diagnostics.Process()
    2. With myprocess.StartInfo
    3. .FileName = ("reg.exe")
    4. .CreateNoWindow = False
    5. .Arguments = "add " + Chr(34) + "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager\Power" + Chr(34) + " /v HiberbootEnabled /t REG_DWORD /d 0 /f"
    6. .RedirectStandardInput = False
    7. .RedirectStandardOutput = False
    8. .RedirectStandardError = False
    9. .UseShellExecute = True
    10. .Verb = "runas"
    11. End With
    12. myprocess.Start()
    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at
    @dive26 Statt

    VB.NET-Quellcode

    1. .Arguments = "add " + Chr(34) + "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager\Power" + Chr(34) + " /v HiberbootEnabled /t REG_DWORD /d 0 /f"
    machst Du einfach

    VB.NET-Quellcode

    1. .Arguments = "add ""HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager\Power"" /v HiberbootEnabled /t REG_DWORD /d 0 /f"
    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!
    Bei den verflixten Anführungszeichen bin ich mir nie ganz sicher, daher mache ich das mit chr(34) ;-).
    Und später tue ich mir auch einfacher.
    Ja, aber ginge auch mit ""
    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at