[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 13:03
Status : Hors ligne

[Ex] Elevation UAC

#1

Message par gothgothhh »

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