[Ex] Elevation UAC

Partagez vos scripts, et vos applications AutoIt.
Règles du forum
.
Répondre
gothgothhh
Niveau 2
Niveau 2
Messages : 28
Enregistré le : ven. 19 août 2011 12:03
Status : Hors ligne

[Ex] Elevation UAC

#1

Message par gothgothhh » mer. 27 juil. 2016 14:15

Bonjour à tous.
Tout d'abord j'aimerais savoir si "Elevation UAC" est le titre qui convient car d'après moi se n'en est pas vraiment une mais je ne trouvais pas d'autre noms alors hésitez pas à en proposer ^^ !
Je viens d'intégrer à mon projet une fonction d'élévation des droits admins relativement simple, je tiens à préciser que la plus grosse partie vient d'une udf qui trainait depuis très longtemps sur mon disque dur, que javais trouvé il me semble sur le .com mais sans pouvoir trop en être sur depuis le temps.
1-Réclamation des droits admins à la première utilisation (et dès que la tâche n'existe plus pour une raison inconnue ou autre)
2-Installation de la tâche (dans l'exemple au démarrage d'une session mais vous pouvez utiliser le même principe sans programmer l’exécution en modifiant le contenu de <LogonTrigger>...</LogonTrigger>
3-Ecrit un fichier .bat qui permet de désinstallé la tâche rapidement (a exécuté avec les droits admins)
4-Lance la tâche (donc soit même) et exit pour laisser place à la tâche

Il est aussi possible de s'en servir autrement, en changeant <LogonTrigger> par <BootTrigger> et en changeant <UserId>' & @UserName & '</UserId>' par <UserId>' & "System" & '</UserId>, le script démarrera en tant que processus system, mais dans ce cas là, il vous faudra dans tous les cas lancer votre script en admin pour pouvoir lancer la tâche. Et moins de choses sont disponible en tant que system, par exemple, pas de trayicon , pas de gui (?) je n'ai pas encore saisis les limitations.
M'enfin bref, n'hésitez pas à intervenir pour améliorer mon code car
Je code avec le cul :oops:
Sa pourra peut être servir à plus débutant que moi sait ont jamais ! ^^
Bonne journée ! :)
#include <WinAPI.au3>
Global Const $Elevated_File = @ScriptDir & "\Elevated.xml"
Global $Elevated_Ret
Global $Elevated_Name = "Elevated"
_Elevated_Create()
While 1
Tooltip("ELEVATED SUCCESFUL")
Sleep(1000)
WEnd
Func _Elevated_Create()
        Local $Task_Temp = _
                        '<?xml version="1.0" encoding="UTF-16"?>' & @CRLF & _
                        '<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">' & @CRLF & _
                        '  <Triggers>' & @CRLF & _
                        '    <LogonTrigger>' & @CRLF & _
                        '      <Enabled>true</Enabled>' & @CRLF & _
                        '    </LogonTrigger>' & @CRLF & _
                        '  </Triggers>' & @CRLF & _
                        '  <Principals>' & @CRLF & _
                        '    <Principal id="Author">' & @CRLF & _
                        '      <UserId>' & @UserName & '</UserId>' & @CRLF & _
                        '      <RunLevel>HighestAvailable</RunLevel>' & @CRLF & _
                        '    </Principal>' & @CRLF & _
                        '  </Principals>' & @CRLF & _
                        '  <Settings>' & @CRLF & _
                        '    <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>' & @CRLF & _
                        '    <DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>' & @CRLF & _
                        '    <StopIfGoingOnBatteries>false</StopIfGoingOnBatteries>' & @CRLF & _
                        '    <AllowHardTerminate>false</AllowHardTerminate>' & @CRLF & _
                        '    <StartWhenAvailable>false</StartWhenAvailable>' & @CRLF & _
                        '    <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>' & @CRLF & _
                        '    <IdleSettings>' & @CRLF & _
                        '      <StopOnIdleEnd>false</StopOnIdleEnd>' & @CRLF & _
                        '      <RestartOnIdle>false</RestartOnIdle>' & @CRLF & _
                        '    </IdleSettings>' & @CRLF & _
                        '    <AllowStartOnDemand>true</AllowStartOnDemand>' & @CRLF & _
                        '    <Enabled>true</Enabled>' & @CRLF & _
                        '    <Hidden>false</Hidden>' & @CRLF & _
                        '    <RunOnlyIfIdle>false</RunOnlyIfIdle>' & @CRLF & _
                        '    <WakeToRun>false</WakeToRun>' & @CRLF & _
                        '    <ExecutionTimeLimit>PT0S</ExecutionTimeLimit>' & @CRLF & _
                        '    <Priority>7</Priority>' & @CRLF & _
                        '  </Settings>' & @CRLF & _
                        '  <Actions Context="Author">' & @CRLF & _
                        '    <Exec>' & @CRLF & _
                        '      <Command>' & @ScriptFullPath & '</Command>' & @CRLF & _
                        '    </Exec>' & @CRLF & _
                        '  </Actions>' & @CRLF & _
                        '</Task>'
        $taskcheck = Run("schtasks.exe /Query /TN " & $Elevated_Name, "", @SW_HIDE, $STDOUT_CHILD)
        Local $line
        While 1
                $line &= StdoutRead($taskcheck)
                If @error Then ExitLoop
        WEnd
        If $line == "" Then
                If Not IsAdmin() Then
                        MsgBox(0, @ScriptName, "Need Admin Rights")
                        Exit
                        EndIf
                FileDelete($Elevated_File)
                FileWrite($Elevated_File, $Task_Temp)
                If FileRead($Elevated_File) <> $Task_Temp Then Return False
                If RunWait('schtasks.exe /Create /XML "' & $Elevated_File & '" /TN ' & $Elevated_Name, '', @SW_HIDE) <> 0 Then
                        FileDelete($Elevated_File)
                        FileDelete("UnInstall.bat")
                        FileWrite("UnInstall.bat", "schtasks.exe /Delete /TN " & $Elevated_Name)
                        _Elevated_Launch()
                        Return False
                EndIf
                FileDelete($Elevated_File)
                FileDelete("UnInstall.bat")
                FileWrite("UnInstall.bat", "schtasks.exe /Delete /TN " & $Elevated_Name)
                _Elevated_Launch()
                Return True
        EndIf
EndFunc   ;==>_Elevated_Create
Func _Elevated_Launch()
        $taskrun = Run("schtasks.exe /Run /TN " & $Elevated_Name, "", @SW_HIDE, $STDOUT_CHILD)
        Local $line
        While 1
                $line &= StdoutRead($taskrun)
                If @error Then ExitLoop
        WEnd
        If $line == "" Then
                MsgBox(0, @ScriptName, "Need Admin Rights")
        EndIf
                        Exit
EndFunc   ;==>_Elevated_Launch

Répondre