"_requireAdmin()"

  • Es kam ja schon häufiger die Frage auf, ob es möglich sei, mitten in einem Skript plötzlich Adminrechte zu erlangen.
    Ich habe eine Möglichkeit gefunden:

    Spoiler anzeigen
    [autoit]

    #include <File.au3>
    If $CmdLine[0] = 0 Then
    main()
    Else
    admin()
    EndIf
    Func main()
    ;unprivileged actions...
    MsgBox(64,"Admin?",isAdmin())
    ;...

    [/autoit] [autoit][/autoit] [autoit]

    ;until:
    $hFile=FileOpen(@ScriptFullPath,1)
    FileWrite($hFile,@CRLF & "#RequireAdmin")
    FileClose($hFile)
    Exit ShellExecute(@ScriptFullPath,"admin")
    EndFunc
    Func admin()
    $lines=_FileCountLines(@ScriptFullPath)
    _FileWriteToLine(@ScriptFullPath,$lines,@CRLF,1)
    ;privileged actions...
    MsgBox(64,"Admin?",isAdmin())
    EndFunc

    [/autoit]


    Funktioniert das bei euch?

    Twitter: @L3viathan2142
    Benutze AutoIt persönlich nicht mehr, da ich keinen Windows-Rechner mehr besitze.

  • Dass er ans Ende schreibt, ist beabsichtigt: Dem Präprozessor ist das ja egal, und die letzte Zeile wird ja gleich nach dem zweiten Start wieder entfernt. Inwiefern funktioniert es denn nicht, wenn er beim zweiten Start korrekt nach Adminrechten fragt? (Ich kann es momentan selbst nicht testen...)

    Twitter: @L3viathan2142
    Benutze AutoIt persönlich nicht mehr, da ich keinen Windows-Rechner mehr besitze.

    • Offizieller Beitrag

    Naja, es klang für mich so als sollte es ein Admin-Rechte liefern, ohne welche zu haben. Das tut es ja nicht.
    Ansonsten sehe ich den Sinn des Ganzen nicht so ganz, klär mich auf ;). Was ist der Vorteil gegenüber einfach oben selbst #RequireAdmin reinzuschreiben?

    Johannes

  • Das während der ausführung eines Scriptes, der Script Adminrechte verlangen kann.
    Da require Admin Preprozessor angelegenheit ist musste Lev da tricksen.

    mfg Ubuntu

  • Wobei man dann die Zeile beim erneuten Start ja immernoch drin hat.
    Ich verstehe den Sinn auch nicht so ganz. Wieso nicht bei den entsprechenden Funktionen abfragen ob man Admin ist (Isadmin) und dem User ggf. mitteilen, dass die Funktionen Adminrechte benötigen?

  • Funktioniert nicht bei mir Win 7 Home Premium
    erhalte 0 0

    wäre aber eine coole funktion. ^^

  • funktioniert unter win 7 genaus wie unter win viste nur bringt das agnze bei ner exe nix

    Das finden von Rechtschreibfehlern muss sofort und unverzüglich dem Autor gemeldet werden. Das eigennützige Verwenden dieser Rechtschreibfehler ist strengstens untersagt und kann mit Freiheitsenzug bestraft werden.

  • Aus der SciTEConfig.au3:

    [autoit]

    Func RunReqAdmin($Autoit3Commands, $prompt = 1)
    Local $temp_Script = _TempFile(@TempDir, "~", ".au3")
    Local $temp_check = _TempFile(@TempDir, "~", ".chk")
    FileWriteLine($temp_check, 'TempFile')
    FileWriteLine($temp_Script, '#NoTrayIcon')
    If Not IsAdmin() Then
    FileWriteLine($temp_Script, '#RequireAdmin')
    If $prompt = 1 Then MsgBox(262144, "Need Admin mode", "Admin mode is needed for this update. Asnwer the following prompts to allow the update.")
    EndIf
    FileWriteLine($temp_Script, $Autoit3Commands)
    FileWriteLine($temp_Script, "FileDelete('" & $temp_check & "')")
    RunWait('"' & @ScriptFullPath & '" /AutoIt3ExecuteScript "' & $temp_Script & '"')
    While FileExists($temp_check)
    Sleep(50)
    WEnd
    FileDelete($temp_Script)
    EndFunc ;==>RunReqAdmin

    [/autoit]