[..] Copier en tant qu'administrateur un Fichier.

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
aurelien78
Niveau 1
Niveau 1
Messages : 2
Enregistré le : ven. 05 sept. 2008 13:40
Status : Hors ligne

[..] Copier en tant qu'administrateur un Fichier.

#1

Message 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.
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1556
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

Re: [..] Copier en tant qu'administrateur un Fichier.

#2

Message 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
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
terminatorn
Status : Hors ligne

Re: [..] Copier en tant qu'administrateur un Fichier.

#3

Message par terminatorn »

Code : Tout sélectionner

#RequireAdmin
En tout début de script pour avoir les droit d'admin
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1556
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

Re: [..] Copier en tant qu'administrateur un Fichier.

#4

Message par sylvanie »

heu, non,
ça ça veut dire qu'on a besoins des droits admin pour lancer le script ...
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
terminatorn
Status : Hors ligne

Re: [..] Copier en tant qu'administrateur un Fichier.

#5

Message 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 ?
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11791
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Copier en tant qu'administrateur un Fichier.

#6

Message 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.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1556
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

Re: [..] Copier en tant qu'administrateur un Fichier.

#7

Message 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\....
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
terminatorn
Status : Hors ligne

Re: [..] Copier en tant qu'administrateur un Fichier.

#8

Message par terminatorn »

Un #RequireAdmin suffit alors chez moi cela marche
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1556
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

Re: [..] Copier en tant qu'administrateur un Fichier.

#9

Message 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
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
aurelien78
Niveau 1
Niveau 1
Messages : 2
Enregistré le : ven. 05 sept. 2008 13:40
Status : Hors ligne

Re: [..] Copier en tant qu'administrateur un Fichier.

#10

Message 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
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1556
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

Re: [..] Copier en tant qu'administrateur un Fichier.

#11

Message 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
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11791
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Copier en tant qu'administrateur un Fichier.

#12

Message 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. :mrgreen:

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. :mrgreen: :mrgreen:

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.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Répondre