[R] Paramètre en ligne de commande

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Avatar du membre
4sp4rt4m3
Niveau 3
Niveau 3
Messages : 46
Enregistré le : dim. 08 janv. 2012 20:55
Status : Hors ligne

[R] Paramètre en ligne de commande

#1

Message par 4sp4rt4m3 »

Salut à tous,


En premier projet, je me suis décidé à faire un petit GUI pour UPX que j'utilise en commande ligne. Les commandes sont basique histoire de me facilité la tâche.
Mon problème est que je bloque lorsque j'insère les paramètre de ligne de commande à Upx, rien ne se passe, je n'ai pas d'erreur pourtant. Malgré les topics qui en parle je n'arrive à mettre le doigt sur l'erreur.
http://www.autoitscript.fr/forum/viewto ... f=3&t=9336
http://www.autoitscript.fr/forum/viewto ... 72&p=50114
http://www.autoitscript.fr/forum/viewto ... =11&t=2931

Je fais :

Code : Tout sélectionner

Dim $Niv = GUICtrlRead($Combo1)
Dim $upx = &@TempDir"\upx.exe" ; le chemin de upx
$LireInput2 = GUICtrlRead($Input2)
Case $Compr
            FileInstall(".\upx.exe", @TempDir &"\") ; envoyer "upx.exe" dans le dossier Temp
            Run(@ComSpec & '/k ' & $upx & $FilePath1 & $Niv & '-o'&$LireInput2 ,"" , @SW_SHOW) ; ligne de commande
La commande se traduit par :

Code : Tout sélectionner

C:\Users\UserName\AppData\Temp\upx.exe C:\executable.exe -1 -oC:\Users\UserName\Desktop\executable_modifié.exe
Si il n'y a pas assez de code j'en mettrais plus!
Mais rien ne se passe. Comme je bloque dessus depuis hier, je viens demander un coup de main.
Ou est ce que j'ai foiré? j'ai même pas l'erreur d'autoit pour m'aiguiller et le Tuto de Tlem ne m'a pas beaucoup aidé... :?

Merci de de vos éventuelles aides. ;)
Modifié en dernier par 4sp4rt4m3 le jeu. 16 févr. 2012 14:17, modifié 2 fois.
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

Re: [..] Paramètre en ligne de commande

#2

Message par ani »

Bien le bonjour

EXe - mode de compression - Nouveau Nom de Fichier Compressé - Fichier à Compresser

Code : Tout sélectionner

UPX [color=#0080FF]-1[/color] [color=#0000FF]-oModFichier.exe[/color] [color=#FF0000]Fichier.exe[/color]
ce qui donne

Code : Tout sélectionner

C:\Users\UserName\AppData\Temp\upx.exe -1 -oC:\Users\UserName\Desktop\executable_modifié.exe C:\executable.exe
une simple commande sous ms-dos (UPX -h)

Bonne continuation
voilàvoilà ;)
Avatar du membre
4sp4rt4m3
Niveau 3
Niveau 3
Messages : 46
Enregistré le : dim. 08 janv. 2012 20:55
Status : Hors ligne

Re: [..] Paramètre en ligne de commande

#3

Message par 4sp4rt4m3 »

Salut Ani,


Le placement du mode de compression dans la ligne de commande ne change rien.

Le code :

Code : Tout sélectionner

upx fichier .exe -1 -oSortie.exe
marche aussi bien que :

Code : Tout sélectionner

upx -1 fichier.exe -oSortie.exe
Enfait je pensais que le problème se situait au niveau des quotes des variables ou autre chose.
Ou est le problème ici?

Code : Tout sélectionner

Run(@ComSpec & '/k ' & $upx & $FilePath1 & $Niv & '-o'&$LireInput2 ,"" , @SW_SHOW)
Merci quand même... :wink:
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Paramètre en ligne de commande

#4

Message par Tlem »

Je pense qu'il manque des espaces :

Code : Tout sélectionner

$upx & " " & $FilePath1 & " " & $Niv & ' -o' & $LireInput2
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
DimVar
Niveau 10
Niveau 10
Messages : 870
Enregistré le : ven. 30 mai 2008 15:08
Status : Hors ligne

Re: [..] Paramètre en ligne de commande

#5

Message par DimVar »

Bonjour 4sp4rt4m3,

Je vois que tu es sous W7 ou Vista et j'ai deja rencontré un pb avec le retour de @tempdir qui me renvoyait une chaine avec les noms de dossier de type "C:\Users\ADMINI~1\AppData\Local\Temp" au lieu de "administrateur"... (sous XP pas de soucis)

Cdlt.
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

Re: [..] Paramètre en ligne de commande

#6

Message par ani »

Dim $upx = &@TempDir"\upx.exe" ; le chemin de upx
soit C'cette erreur ou alors celle cité plus haut l'espacement ou encore quote ou encore l'ensemble :oops:
ou t'a rajouté cette variable ($upx) supplémentaire pour réduire le code ?

au lieu d'un run remplace le par un consolwrite|msgbox ;)

car là il est vrai qu'il manque des espaces et un commutateurs pour la variable niveau (ou c'est inclus dans ton combo?)

Code : Tout sélectionner

Run(@ComSpec & ' /k ' & @TempDir & '\upx.exe' & chr(32) & $FilePath1 & chr(32) & '-' & $Niv & chr(32) & '-o' & $LireInput2,"",@SW_SHOW)
chr(32) = espace
Avatar du membre
4sp4rt4m3
Niveau 3
Niveau 3
Messages : 46
Enregistré le : dim. 08 janv. 2012 20:55
Status : Hors ligne

Re: [..] Paramètre en ligne de commande

#7

Message par 4sp4rt4m3 »

Tlem a écrit :Je pense qu'il manque des espaces :

Code : Tout sélectionner

$upx & " " & $FilePath1 & " " & $Niv & ' -o' & $LireInput2
J'ai "erreur dans l'expression" en mettant les espaces.
ani a écrit :
Dim $upx = &@TempDir"\upx.exe" ; le chemin de upx
soit C'cette erreur ou alors celle cité plus haut l'espacement ou encore quote ou encore l'ensemble :oops:
ou t'a rajouté cette variable ($upx) supplémentaire pour réduire le code ?

au lieu d'un run remplace le par un consolwrite|msgbox ;)

car là il est vrai qu'il manque des espaces et un commutateurs pour la variable niveau (ou c'est inclus dans ton combo?)
Sans le & Autoit m'annonce une erreur. EDIT : j'ai rectifié effectivement. :?

Et oui le commutateur est inclus dans le combo. :)
En revanche Consolewrite n'est pas adapté car la manip est censé se faire en caché.
DimVar a écrit :Bonjour 4sp4rt4m3,

Je vois que tu es sous W7 ou Vista et j'ai deja rencontré un pb avec le retour de @tempdir qui me renvoyait une chaine avec les noms de dossier de type "C:\Users\ADMINI~1\AppData\Local\Temp" au lieu de "administrateur"... (sous XP pas de soucis)

Cdlt.
j'ai le même problème sous XP, soit rien se lance...


Je vous met le code complet, pour y voir mieux, j'ai peut être foiré ailleurs :
► Afficher le texteCode complet
Voila, si quelqu'un a le temps de jeter un coup d'oeil. Merci à vous tous en tout cas :wink:
Modifié en dernier par 4sp4rt4m3 le mer. 15 févr. 2012 02:09, modifié 1 fois.
Avatar du membre
TopXm
Niveau 6
Niveau 6
Messages : 260
Enregistré le : mer. 25 mai 2011 16:37
Localisation : Usa
Status : Hors ligne

Re: [..] Paramètre en ligne de commande

#8

Message par TopXm »

Salut,

Ce que voulais te dire ani c'est que ton & est mal placé :

Code : Tout sélectionner

$upx = @TempDir & "\upx.exe" ; le chemin de upx
Pour faire un mixte des précédents bons conseils, en fait il faut que ta commande soit le reflet exact de ce que tu pourrais saisir en invite de commande (mais ça tu t'en doutes :) ) d'où l'idée (d'ani encore :) ) de faire un ConsoleWrite dans un 1er temps pour contrôler la syntaxe de ta commande ;)
Exemple :

Code : Tout sélectionner

ConsoleWrite(@TempDir & '\upx.exe' & chr(32) & $FilePath1 & chr(32) & '-' & $Niv & chr(32) & '-o' & $LireInput2)
ConsoleWrite(@CRLF)
NB1 : je l'ai mis sur deux lignes, pour bien différencier la commande et le CRLF derrière.
NB2 : Tlem ne poste pas pour rien ;) problème d'espace. Je ne connais pas les switchs pour upx.exe mais "métavi" qu'il faut au moins un espace entre upx.exe et le double-quote qui suit (enfin je pense), pour le reste ... chépa je ne trouve même pas la syntaxe :oops:
Avatar du membre
4sp4rt4m3
Niveau 3
Niveau 3
Messages : 46
Enregistré le : dim. 08 janv. 2012 20:55
Status : Hors ligne

Re: [..] Paramètre en ligne de commande

#9

Message par 4sp4rt4m3 »

Avec consolewrite je ne peux même pas vérifié si la syntaxe est bonne, rien ne se passe, la console ne s'ouvre pas et autoit ne me balance aucune erreur. Cependant j'avais déjà vérifié la syntaxe avec des msgbox et tout s'affiche comme il faut...
Même en mettant le chemin en "dur", rien ne se lance...

Sinon oui effectivement mon & été mal placé, j'ai rectifié... Merci :)
Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 870
Enregistré le : ven. 30 mai 2008 15:08
Status : Hors ligne

Re: [..] Paramètre en ligne de commande

#10

Message par DimVar »

Petite insomnie, j'en profite pour tester ton code.

- Ta variable $upx n'est pas utilisée ?
- Sur ta commande en ligne 93

Code : Tout sélectionner

Run(@ComSpec & '/k '  @TempDir & 'upx.exe' & " " & $FilePath1 & " " & $Niv & ' -o' & $LireInput2 ,"" , @SW_SHOW) ; ligne de commande
Il manque un "&" avant le @tempdir, un espace avant le "/k" et un backslash avant upx.exe

Code : Tout sélectionner

Run(@ComSpec&' /k '&@TempDir&'\upx.exe '&$FilePath1&" "&$Niv&' -o'&$LireInput2 ,"" , @SW_SHOW) ; ligne de commande
REMARQUE : Compressing 64 bit windows executables is not supported yet. It will show an error message "can't pack new-exe."

Testé et ok, je vais me recoucher... :)
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

Re: [..] Paramètre en ligne de commande

#11

Message par ani »

Alors au niveau de la variable $FilePath1, il serait bon de lui fournir l'information désiré
il te manque un GuiCtrlRead ^^'

→ $FilePath1 = GuiCtrlRead($Input1)

je pârt tester ton code sous seven

bonne continuation ;)
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Paramètre en ligne de commande

#12

Message par Tlem »

TopXm a écrit :NB2 : Tlem ne poste pas pour rien ;) problème d'espace. Je ne connais pas les switchs pour upx.exe mais "métavi" qu'il faut au moins un espace entre upx.exe et le double-quote qui suit (enfin je pense), pour le reste ... chépa
Heuu, ben quand on sait pas, on dit rien. :P

Je signale que je suis parti du message précédent qui donne ceci :

Code : Tout sélectionner

Run(@ComSpec & '/k ' & $upx & $FilePath1 & $Niv & '-o'&$LireInput2 ,"" , @SW_SHOW)
Si je fait abstraction de Run(@ComSpec & '/k ' & qui est juste, nous avons :

Code : Tout sélectionner

$upx & $FilePath1 & $Niv & '-o'&$LireInput2
qui traduit par les données du premier message nous donne :

Code : Tout sélectionner

C:\Users\UserName\AppData\Temp\upx.exeC:\executable.exe-1-oC:\Users\UserName\Desktop\executable_modifié.exe
Ya pas un blème d'espaces pour vous ?

Soyons fou, je dirait même que ma réponse est incomplète, car si l'un des chemins contient un seul espace, alors c'est foutu. :roll:

Donc je révise ma réponse par celle-ci :

Code : Tout sélectionner

Run(@ComSpec & '/k "' & $upx & '" "' & $FilePath1 & '" ' & $Niv & ' -o"' & $LireInput2 & '"' ,"" , @SW_SHOW)
Attention aux doubles et simples guillemets. Dans ce cas vaut mieux passer par du copier/coller. ;)
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
4sp4rt4m3
Niveau 3
Niveau 3
Messages : 46
Enregistré le : dim. 08 janv. 2012 20:55
Status : Hors ligne

Re: [R] Paramètre en ligne de commande

#13

Message par 4sp4rt4m3 »

ani a écrit :Alors au niveau de la variable $FilePath1, il serait bon de lui fournir l'information désiré
il te manque un GuiCtrlRead ^^'

→ $FilePath1 = GuiCtrlRead($Input1)
Non j'ai reussi à faire sans, et j'ai vérifié, cela affiche bien $FilePath1, sans passez pas GUICtrlRead

Code : Tout sélectionner

Case $Button1
            Global $FilePath1 = FileOpenDialog("Sélectionnez l'executable", @DesktopDir, "Executable (*.exe)", 1)
            GUICtrlSetData($Input1, $FilePath1)
Tlem a écrit :Ya pas un blème d'espaces pour vous ?

Soyons fou, je dirait même que ma réponse est incomplète, car si l'un des chemins contient un seul espace, alors c'est foutu. :roll:
Attention aux doubles et simples guillemets. Dans ce cas vaut mieux passer par du copier/coller. ;)
Effectivement, surtout au niveau des doubles guillemets pour le chemin avec espace, j'y avais pensais mais chaque chose en son temps, le code avec un chemin sans espace ne marchait déjà pas :D

J'ai fait les corrections, et toujours le même soucis, rien ne se lance, pas d'erreur, même pas de console qui s'affiche brièvement, rien.
► Afficher le texteCode complet
Bref, je vais mettre ça de coté, je le reprendrais plus tard, merci à tous pour vos conseils, avis et corrections :wink:
Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 870
Enregistré le : ven. 30 mai 2008 15:08
Status : Hors ligne

Re: [R] Paramètre en ligne de commande

#14

Message par DimVar »

Euh.... J'ai apporté une reponse... L'as tu vu ?
Ce code fonctionne tres bien chez moi.
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !
Avatar du membre
4sp4rt4m3
Niveau 3
Niveau 3
Messages : 46
Enregistré le : dim. 08 janv. 2012 20:55
Status : Hors ligne

Re: [R] Paramètre en ligne de commande

#15

Message par 4sp4rt4m3 »

DimVar a écrit :Euh.... J'ai apporté une reponse... L'as tu vu ?
Ce code fonctionne tres bien chez moi.
Arf j'avais pas vu ton message, quel imbecile tête en l'air :mrgreen: . Effectivement ça marche nickel!!!
DimVar a écrit : Il manque un "&" avant le @tempdir, un espace avant le "/k" et un backslash avant upx.exe

Code : Tout sélectionner

Run(@ComSpec&' /k '&@TempDir&'\upx.exe '&$FilePath1&" "&$Niv&' -o'&$LireInput2 ,"" , @SW_SHOW) ; ligne de commande
L'espace avant le /k je l'avais considéré comme "acquis" et je ne serais surement pas revenu dessus (quelle erreur), bien vu, je n'ai plus qu'a inclure les doubles guillemet comme le disais Tlem pour prévoir les espaces dans "chemins" et tout roule.

Merci DimVar, en faite merci à tous pour le coup de main... :wink:
Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 870
Enregistré le : ven. 30 mai 2008 15:08
Status : Hors ligne

Re: [R] Paramètre en ligne de commande

#16

Message par DimVar »

C'est bien ce qui me semblait :P
T'embete pas trop pour les double quotes et la gestion des espaces, moi je l'inclue (l'espace) a la suite de UPX.EXE

Code : Tout sélectionner

Run(@ComSpec&' /k '&@TempDir&'\upx.exe '<---ICI
Comme l'avait dis ani ou autre, le consolewrite te permet de copier coller la ligne et de la tester direct en cmd. C'est d'ailleurs comme ca que j'ai eu l'erreur ("can't pack new-exe.") en voulant compacter calc.exe (compilé pour 64bits).

Bonne continuation.
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !
Avatar du membre
4sp4rt4m3
Niveau 3
Niveau 3
Messages : 46
Enregistré le : dim. 08 janv. 2012 20:55
Status : Hors ligne

Re: [R] Paramètre en ligne de commande

#17

Message par 4sp4rt4m3 »

Non je parlais de la gestion des espaces pour les chemins de destination genre

Code : Tout sélectionner

 upx C:\exemple.exe -1 -oD:\Dossier Perso\Bla\BlaBla\BlaBla.exe
Le code qui sera pris en compte c'est :

Code : Tout sélectionner

upx C:\exemple.exe -1 -oD:\Dossier
A cause de l'espace entre 'dossier' et 'Perso' qui coupe le chemin... Il faut attacher le chemin avec des guillemets...

Code : Tout sélectionner

 upx C:\exemple.exe -1 -o"D:\Dossier Perso\Bla\BlaBla\BlaBla.exe"
C'est de ça dont je parlais :D
Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 870
Enregistré le : ven. 30 mai 2008 15:08
Status : Hors ligne

Re: [R] Paramètre en ligne de commande

#18

Message par DimVar »

Autant pour moi.

Dans ce cas, il faut je pense, quoter les doubles quotes. Car nombre de commandes dos acceptent les espaces dans les chaines si ils sont doucle quotés. il faudra donc scripter comme suit :

Executable.exe '"c:\documents ans settings\test\toto"'

Cdlt.
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !
Avatar du membre
4sp4rt4m3
Niveau 3
Niveau 3
Messages : 46
Enregistré le : dim. 08 janv. 2012 20:55
Status : Hors ligne

Re: [R] Paramètre en ligne de commande

#19

Message par 4sp4rt4m3 »

Après une demi heure de recherche, je n'ai pas réussi à doubler les guillemets des variables malgré ton exemple. Du coup j'ai trouvé une solution, ça fonctionne, mais j'avoue que ça fait un peu "bricoleur du dimanche".

Code : Tout sélectionner

Dim $Guil = '"'
Run(@ComSpec&" /k "&@TempDir&"\upx.exe "&$Guil&$FilePath1&$Guil&" "&$Niv&" -o" &$Guil&$LireInput2&$Guil,"" , @SW_SHOW)
 
Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 870
Enregistré le : ven. 30 mai 2008 15:08
Status : Hors ligne

Re: [R] Paramètre en ligne de commande

#20

Message par DimVar »

C'est une maniere de faire.
Une autre aurait été :
► Afficher le texte
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !
Répondre