Page 1 sur 1

[R] La commande RUN ne lance que des EXE ?

Posté : lun. 13 août 2007 11:02
par XcessiV
Bonjour tout le monde.

Est-ce moi ou la commande RUN ne fonctionne qu'avec des .exe ?
J'ai un vilain message qui me dit qu'il ne peux pas lancer le programme (sauf les .exe).

Voila ce que j'ai fait :

Code : Tout sélectionner

If Not IsAdmin() Then
    RunAsSet('coeadmin', $PWD)
    Dim $szDrive, $szDir, $szFName, $szExt
    $Res = _PathSplit(GuiCtrlRead($InputURL), $szDrive, $szDir, $szFName, $szExt)
    Run('"' & $Res[0] & '"', $szDrive & $szDir, @SW_MAXIMIZE)
    Exit
    RunAsSet()
Else
    Dim $szDrive, $szDir, $szFName, $szExt
    $Res = _PathSplit(GuiCtrlRead($InputURL), $szDrive, $szDir, $szFName, $szExt)
    Run('"' & $Res[0] & '"', $szDrive & $szDir, @SW_MAXIMIZE)
EndIf
Une idée ?

Posté : lun. 13 août 2007 15:21
par Tlem
Extrait de la doc de AutoIt :
Run ( "filename" [, "workingdir" [, flag[, standard_i/o_flag]]] )
filename : The name of the executable (EXE, BAT, COM, or PIF) to run.

ShellExecute ( "filename" [, "parameters" [, "workingdir" [, "verb" [, showflag]]]] )
filename : The name of the file to run (EXE, .txt, .lnk, etc).
Il semblerait que ShellExecute soit plus indiquer dans votre cas puisque vous voulez lancer autre chose qu'un EXE, BAT, COM, ou PIF.
Pensez à rajouter $PID = ShellExecute ..... pour avoir le PID de votre programme d'installation (Ca permet de le surveiller).

Utilisez la ligne Dim $szDrive, $szDir, $szFName, $szExt une seule fois, en début de votre code (Avant le IF).

La commande RunAsSet() ne peut être exécutée puisque elle ce trouve après le Exit !!

Utilisez @SW_HIDE au lieu de @SW_MAXIMIZE pour masquer l'installation de votre programme (En vue d'utiliser le progressBar d'attente).

Pourquoi faire la condition If Not IsAdmin() si c'est pour faire la même ligne de commande en non admin (Votre code après le else est le même que avant le else !!!) ?

Posté : lun. 13 août 2007 16:08
par XcessiV
Tlem a écrit :Utilisez la ligne Dim $szDrive, $szDir, $szFName, $szExt une seule fois, en début de votre code (Avant le IF).
Ok.
Tlem a écrit :La commande RunAsSet() ne peut être exécutée puisque elle ce trouve après le Exit !!
Il me semblait que cette commande enlevait les droit d'admin si on les avait donnés auparavent, je me trompe ?
Tlem a écrit :Pourquoi faire la condition If Not IsAdmin() si c'est pour faire la même ligne de commande en non admin (Votre code après le else est le même que avant le else !!!) ?
Je voulais faire de sorte à ce que si l'user n'est pas admin bah on execute le programme en tant qu'admin et si il l'était déjà bah ne rien changer...
Comment auriez vous fait ?

Code : Tout sélectionner

Dim $szDrive, $szDir, $szFName, $szExt 
If Not IsAdmin() Then 
   RunAsSet('coeadmin', $PWD) 
EndIf
   $Res = _PathSplit(GuiCtrlRead($InputURL), $szDrive, $szDir, $szFName, $szExt) 
   Run('"' & $Res[0] & '"', $szDrive & $szDir, @SW_MAXIMIZE) 
   RunAsSet() 
   Exit
Quelque chose dans ce genre ?

Posté : lun. 13 août 2007 21:34
par Tlem
XcessiV a écrit :Il me semblait que cette commande enlevait les droit d'admin si on les avait donnés auparavent, je me trompe ?
Non, mais il faut le faire avant de sortir du script, comme vous l'avez corriger ci-dessus !
XcessiV a écrit :Comment auriez vous fait ?

Quelque chose dans ce genre ?
Absolument !

Il ne reste plus qu'a passer le RUN en SHELLEXECUTE, pour lancer autre chose que du COM, EXE , BAT ou PIF. :wink:

Posté : mar. 14 août 2007 13:34
par XcessiV
Merci Tlem !

Vais tester ça de suite :)