Eine EXE aus einem AUTOIT-Script 'als Administrator ausführen'

  • Hallo Freunde der gepflegten Programmierung 8)

    also ich fange mal mit den wichtigen Punkten an: Ja, ich habe gesucht! Ja, ich kenne #requireadmin! Ja, ich kenne RunAs()

    Die Frage ist allerdings recht banal aber auch wieder nicht: Wie kann ich aus einem Script welches eine normaler User starten darf (also klar OHNE #requireadmin) eine EXE mit 'als Administrator ausführen' aufgerufen werden? Und zwar mit aktivem UAC unter Win7...

    Beispiel: Wenn ich auf [Start] klicke und in der Suchzeile 'Regedit' eingebe (ohne ENTER!) und dann auf den Eintrag in den Suchergebnissen mit rechts klicke und sage 'als Admin ausführen' öffnet sich die Registry anders als wenn ich das aus AUTOIT mit RunAs () mache.

    Der wichtige Unterschied: Ich sehe den Pfad HKLM\Software\Wow6432Node nur wenn ich die Regedit über den Rechtsklick öffne...

    Auch das DOS-Fenster (cmd.exe) vehält sich per Rechtsklick geöffnet anders als per RunAs()

    Den einzigen Workaround den ich derzeit habe: Ich starte die kompilierte EXE meines Script mit nem Rechtsklick und 'als Admin'... Dann gehts, aber das ist nicht hilfreich für mein Problem.

    Hintergrund zum Script: Es sollen über Schaltflächen halt diverse Tools als Admin ausgeführt werden, die GUI selbst jedoch nicht. Erst beim klicken auf die Buttons soll der UAC noch den Anmeldedaten eines Admins fragen.

    Kann die Problematik nachvollzogen werden und gibt es da eine Lösung?

    Danke, Gruß Mike

  • denke nicht, dass das geht, das wäre ja ein riesiges Sicherheitsleck :)

    Wenn du eine Möglichkeit gefunden hast, sag bescheid! :D

    Simon nörgelt, Simon nervt - aber Simon verbessert die Welt. Glaubt er.

  • Ja, ich kenne RunAs()

    mit rechts klicke und sage 'als Admin ausführen' öffnet sich die Registry anders als wenn ich das aus AUTOIT mit RunAs () mache.

    Der wichtige Unterschied: Ich sehe den Pfad HKLM\Software\Wow6432Node nur wenn ich die Regedit über den Rechtsklick öffne...

    Auch das DOS-Fenster (cmd.exe) vehält sich per Rechtsklick geöffnet anders als per RunAs()

    :rolleyes: :whistling:

  • :S
    Schade, es schein doch ein Verständnis-Problem zu geben. Entweder denke ich zu kompliziert oder es geht einfach nicht...
    Ich weiß allerdings auch nicht wie ich es anders erklären soll. :wacko: 

  • mikexmagic: Ich weiß glaube ich was Du meinst. Ich hatte heute ein ähnliches, wenn nicht gleiches Problem.

    Ein EXE einer Sicherheitssoftware muss als spezieller User gestartet werden. Unter Windows7 mit "Ausführen als anderer Benutzer" (Shift / Rechstklick), Username und Passwort eingeben, UAC erscheint und die Software startet.

    Das gleiche habe ich mit AutoIt und RunAs() versucht, nichts zu machen. Nach dem Start durch RunAs() mit Username, Domain und Passwort, wird das Programm sofort wieder geschlossen. Eine UAC-Box erscheint nicht. Egal ob mit oder ohne '#RequireAdmin' im Script.

    Eine Lösung habe ich zur Zeit auch nicht....

    Edit: Was wir etwa suche ist eine Kombi aus "Ausführen als Administrator" und "Ausführen als anderer Benutzer". Eben ein 'RunAsOtherAdmin()' ;)

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

    Einmal editiert, zuletzt von Micha_he (10. April 2013 um 17:25)

  • Ich versuche es nochmal zu erklären wo mein Problem ist und zeige die Unterschiede in den Lösungsansätzen auf. Meine Beispiele sind immer Win7 64bit Standarduser...

    Fall A) Klick auf Start -> 'regedit' eingeben und Enter drücken. Registry-Editor geht auf, unter HKLM\SOFTWARE ist der Unterschlüssel Wow6432Node sichtbar. Aber natürlich sind keine Änderungen unter HKLM möglich -> Es fehlen die Rechte! (soweit logisch :rolleyes: )



    Fall B) Klick auf Start -> 'regedit' eingeben -> Suchergebnisse abwarten -> Regedit.exe aus den Suchergebnissen mit rechts anklicken -> 'Als Administrator ausführen' -> UAC möchte Benutzername und Kennwort eines Admins haben -> Registry-Editor öffnet sich. Der Unterschlüssel Wow6432Node ist sichtbar UND kann bearbeitet werden. (Genau so soll es sein!  :thumbup: )


    Die Lösung: Zwei Apps/Scripte! 8)
    Script A stellt die ganz normale GUI dar, ohne #RequireAdmin! Der normale User kann das Tool ganz normal öffnen und benutzen. Beim klick auf den Button [Regedit öffnen] wird Script B gestart. Vereinfacht dargestellt::

    [autoit]

    #RequireAdmin
    RunAs("admin", "lokalerpc", "blablabla", 2 , "C:\Windows\Regedit.exe" , "C:\" )

    [/autoit]


    Die Kombination aus #RequireAdmin UND RunAs() öffnet den Registry-Editor nun so wie gewünscht: HKLM bearbeitbar und Wow6432Node sichtbar!


    Danke für Eure Ideen und Hilfe  :thumbup:


  • Mit Hilfe eines Beitrages von funkey hier im Forum, bin ich gerade auf einen Lösungsansatz für mein Problem gekommen:

    Grundvariante
    [autoit]

    $sExeName = "C:\Windows\System32\RegEdit.exe"
    $sUserName = "DomainAdmin"
    $sUserDomain = "Domain"
    $sUserPass = InputBox("Passwort", "Passwort von '" & $SUserName & "' ?", "", "*")

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

    _ShellExecuteAs($sUserName, $sUserDomain, $sUserPass, 0, $sExeName, "", "", "", @SW_SHOW)

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

    Func _ShellExecuteAs($username, $domain, $password, $logon_flags, $filename, $Param = '', $Workdir = '', $Verb = '', $Showflag = '')
    RunAs($username, $domain, $password, $logon_flags, @AutoItExe & ' /AutoIt3ExecuteLine "ShellExecute(''' & $filename & ''',''' & $Param & ''',''' & $Workdir & ''',''' & $Verb & ''',''' & $Showflag & ''')"')
    EndFunc ;==>_ShellExecuteAs ([email='funkey@autoit.de'][/email])

    [/autoit]

    Da das spätere kompilierte Script leider an einem Ort liegt, wo der RunAs-Benutzer keinen Zugriff hat, musste ich die Grundvariante abändern, damit das File an einem gemeinsamen Ort (in meinem Beispiel %SYSTEMDRIVE%\TEMP) liegt:

    Variante 2
    [autoit]

    $sAName = @AutoItExe
    If @Compiled Then
    FileCopy(@AutoItExe, EnvGet("SystemDrive") & "\TEMP", 1)
    $sAName = EnvGet("SystemDrive") & "\TEMP\" & @ScriptName
    EndIf

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

    $sExeName = "C:\Windows\System32\RegEdit.exe"
    $sUserName = "DomainAdmin"
    $sUserDomain = "Domain"
    $sUserPass = InputBox("Passwort", "Passwort von '" & $sUserName & "' ?", "", "*")

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

    _ShellExecuteAs($sUserName, $sUserDomain, $sUserPass, 0, $sExeName, "", "", "", @SW_SHOW)

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

    Func _ShellExecuteAs($username, $domain, $password, $logon_flags, $filename, $Param = '', $Workdir = '', $Verb = '', $Showflag = '')
    RunAsWait($username, $domain, $password, $logon_flags, $sAName & ' /AutoIt3ExecuteLine "ShellExecute(''' & $filename & ''',''' & $Param & ''',''' & $Workdir & ''',''' & $Verb & ''',''' & $Showflag & ''')"')
    If FileExists($sAName) Then FileDelete($sAName)
    EndFunc ;==>_ShellExecuteAs ([email='funkey@autoit.de'][/email])

    [/autoit]

    Beide Beispiele nutzen hier den RegEdit, welche ja ein identische Verhalten zeigt. Als Test kann auch ein zweiter lokaler User (Domain dann der PCName) dienen, was ich aber nicht getestet habe.

    Vielleicht hilft dies auch mikexmagic.

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"