Page 1 sur 1
[..] Copier en tant qu'administrateur un Fichier.
Posté : lun. 15 sept. 2008 17:28
par aurelien78
Bonjour,
Voici le petit script que je n'arrive pas a faire fonctionner.
Pour résumer, je possède une police donc un fichier.TTF a copié dans C:\windows\fonts.
Cependant cette copie nécessite les droits administrateurs et je n'arrive pas à réalisé cette copie.
Voici mon petit script :
Code : Tout sélectionner
#include <GUIConstants.au3>
#include <Constants.au3>
[color=#40BF00];J'inclus ma police et mon .bat dans l'executable[/color]
FileInstall (@TempDir&"\MaPolice.TTF", @TempDir&"MaPolice.TTF", 1)
FileWrite(@TempDir &"Batch.bat","xcopy %temp%\MaPolice.TTF %windir%\Fonts ")
[color=#40BF00];j'execute en tant qu'administrateur[/color]
RunAsSet (Administrateur,@computername,Password,0)
[color=#40BF00];je lance mon .bat en admin[/color]
Run ("cmd /k %temp%\Batch.bat","",@SW_enable)
RunAsSet()
sleep (300)
FileDelete(@TempDir&"\MaPolice.TTF")
FileDelete(@TempDir&"\Batch.bat)
;Fin
MsgBox (64, "Installation de la police AutoIt pour Windows XP", "La nouvelle police à été installée !")
Exit[/color]
Merci beaucoup pour votre aide.
Cordialement,
Aurélien.
Re: [..] Copier en tant qu'administrateur un Fichier.
Posté : lun. 15 sept. 2008 20:57
par sylvanie
Bonsoir,
A première lecture il manque un \ :
Code : Tout sélectionner
FileInstall (@TempDir&"\MaPolice.TTF", @TempDir&"[color=#FF0000]\[/color]MaPolice.TTF", 1)
cependant le passage par un .bat est superflux, puisque Fileinstall peut faire le même travaille :
Code : Tout sélectionner
#include <GUIConstants.au3>
#include <Constants.au3>
;J'inclus ma police et mon .bat dans l'executable
RunAsSet (Administrateur,@computername,Password,0)
FileInstall (@TempDir&"\MaPolice.TTF", @WindowsDir&"\Fonts\MaPolice.TTF", 1)
RunAsSet()
sleep (300)
FileDelete(@TempDir&"\MaPolice.TTF")
;Fin
MsgBox (64, "Installation de la police AutoIt pour Windows XP", "La nouvelle police à été installée !")
Exit
NB : dans la drnière version d'Autoit Runasset est remplacé par Runas
Re: [..] Copier en tant qu'administrateur un Fichier.
Posté : lun. 15 sept. 2008 21:13
par terminatorn
En tout début de script pour avoir les droit d'admin
Re: [..] Copier en tant qu'administrateur un Fichier.
Posté : lun. 15 sept. 2008 22:57
par sylvanie
heu, non,
ça ça veut dire qu'on a besoins des droits admin pour lancer le script ...
Re: [..] Copier en tant qu'administrateur un Fichier.
Posté : mar. 16 sept. 2008 07:26
par terminatorn
Ba alors je ne comprend pas ce qu'il veut :s ( la copie qui doit avoir les droits admins )
C'est ce que tu veux copier qui doit avoir les droits d'admins ?
Re: [..] Copier en tant qu'administrateur un Fichier.
Posté : mar. 16 sept. 2008 07:50
par Tlem
Il est parfois utile de lire la documentation :
#RequireAdmin : Specifies that the current script requires full administrator rights to run.
This function was primarily aimed at allowing AutoIt scripts to work correctly with Windows Vista User Account Control (UAC) (However, will also work on Windows 2000 and Windows XP).
RunAs : Runs an external program under the context of a different user.
When running as an administrator, the Secondary Logon (RunAs) service must be enabled or this function will fail. This does not apply when running as the SYSTEM account.
After running the requested program the script continues. To pause execution of the script until the spawned program has finished use the RunAsWait function instead.
Re: [..] Copier en tant qu'administrateur un Fichier.
Posté : mar. 16 sept. 2008 19:12
par sylvanie
terminatorn a écrit :Ba alors je ne comprend pas ce qu'il veut :s ( la copie qui doit avoir les droits admins )
C'est ce que tu veux copier qui doit avoir les droits d'admins ?
Ce n'est pas le fichier en lui même qui nécessite des droit admi, mais le répertoire de destination :
C:\Windows\... (ou WINNT...) sont des répertoires systèmes où seuls les comptes admin, user avec droits étendus ou system peuvent écrire. Pas le simple user.
Donc si le script est lancer par un simple user (le script va prendre ses droits), il faut modifier les droits en indiquant grâce à runas (runasset ancienne version) pour que le script s'exécute avec les droits admin et ainsi avoir le droit de copier dans C:\Windows\....
Re: [..] Copier en tant qu'administrateur un Fichier.
Posté : mar. 16 sept. 2008 20:46
par terminatorn
Un #RequireAdmin suffit alors chez moi cela marche
Re: [..] Copier en tant qu'administrateur un Fichier.
Posté : mar. 16 sept. 2008 21:39
par sylvanie
C'est parce que ton login est admin de ta machine ...
Si ce n'était pas le cas, tu aurais un message d'erreur au lancemnet du script comme quoi tu n'es pas admin
Re: [..] Copier en tant qu'administrateur un Fichier.
Posté : mer. 17 sept. 2008 10:48
par aurelien78
Bonjour,
Merci pour votre aide. J'ai télécharger la nouvelle version d'autoIt pour être un peut à jour.
RunAsSet => RunAs.
Cependant, je possède un petit message d'erreur
Code : Tout sélectionner
>"C:\Program Files\AutoIt3\SciTE\..\autoit3.exe" /ErrorStdOut "F:\AutoIt\Police\Script.au3"
F:\AutoIt\Police\Script.au3 (22) : ==> Incorrect number of parameters in function call.:
RunAs()
^ ERROR
>Exit code: 1 Time: 0.726
[/color]
Cependant, je n'arrive pas a comprendre ou est mon erreur car j'ai utiliser la même syntaxe que celle de l'aide (F1)
Voici mon code :
Code : Tout sélectionner
[color=#FF00FF]#include <GUIConstants.au3>
#include <Constants.au3>[/color]
FileInstall("D:\Temp\MaPolice.TTF", @TempDir & "\MaPolice.TTF", 1)
[color=#80FF00]; Fill in the username and password appropriate for your system.[/color]
Local $sUserName = "Administrateur"
Local $sPassword = "P@ssw0rd"
[color=#80FF00]; Run a command prompt as the other user.[/color]
RunAs($sUserName, @ComputerName, $sPassword, 0, @ComSpec, @SystemDir)
FileInstall("D:\Temp\MaPolice.TTF", @WindowsDir & "\Fonts\MaPolice.TTF", 1)
sleep(300)
RunAs()
FileDelete(@TempDir & "\MaPolice.TTF")
MsgBox(64, "Installation de la nouvelle police", "La police AutoIT est maintenant disponible pour toutes les applications de votre ordinateur")
Exit
Merci par avance,
Aurélien
Re: [..] Copier en tant qu'administrateur un Fichier.
Posté : mer. 17 sept. 2008 21:25
par sylvanie
c'est parce que malheureusement Runas remplace runasset, mais n'est pas son équivalent strict :
Runasset permet de switcher de droit user, puis runasset sans argument restaure l'ancien statu.
Runas prend en argument impérativement le compte, mdp ... puis un executatable à lancer, c'est là la différence ...
Les deux fonctions n'ont pas le même nombre d'arguments et ont ce comportement différents.
Donc soit on reste en ancienne version avec runasset, et là ça va marcher (du moins au sens grammaire du script)
Ou bien on prends runas, mais on gère différement :
On compile le script de recopie sans runas (comme si il étati dédié à un admin , pas de soucis de droit ...). Appelons le résultat toto.exe
Ensuite on crée un 22eme scrpt (là ça devient lourd ...) qui fait un Filinstal de toto.exe dans @tempdir par exple puis on lance un RunAs ( "username", "domain", "password", 0, @tempdir&"\toto.exe")
On compile et on donne cet exe là (ça fait poupé Russe...)
Choisis ton option ... Sauf si quelqu'un voit autrement, celà serait bienvenu
Re: [..] Copier en tant qu'administrateur un Fichier.
Posté : mer. 17 sept. 2008 21:41
par Tlem
On peut imaginer plusieurs possibilités.
Si les commandes ne sont pas trop nombreuses et ont leur équivalent en batch, on peut faire une suite de lignes de
RunAs qui exécuterons les commandes une à une, ou alors un tableau de commandes puis une boucle qui les exécuteras une à une.
Une autre solution à tester serait de contrôler les droits(
IsAdmin) ou d'utiliser un flag externe (base de registre ou test d'écriture de fichier), et en fonction du résultat le script se relancerait tout seul avec les bons droits.
Comme ceci :
Local $sUserName = "Administrateur"
Local $sPassword = "P@ssw0rd"
If not IsAdmin() Then
RunAs($sUserName, @ComputerName, $sPassword, 0, @ScriptFullPath, @ScriptDir)
Exit
EndIf
; La suite du code comme si on est Admin.