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
Sa pourra peut être servir à plus débutant que moi sait ont jamais ! ^^Je code avec le cul
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
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