Page 1 sur 1

[OK] Bug de RunProgram( ??

Publié : sam. 09/juil./2016 14:14
par JohnJohnsonSHERMAN
Pour mon usage personnel, j'ai voulu compiler avec un compilateur en ligne de commande NBC (pour robots) un code source (pour robot aussi, mais on s'en fout)...
La syntaxe est la suivante :

Code : Tout sélectionner

"D:\Program Files (x86)\NXT\NBCCompiler\nbc.exe" +  -O=D:\monexecutablerobot.rxe + moncodesource.nxc
dans les propriétés de raccourci Windows.
On constate qu'il y a bien deux paramétres : le fichier de sortie ( -O=D:\monexecutablerobot.rxe) et le fichier a compiler (moncodesource.nxc), séparés par des "+". Tout marche trés bien, j'ai bien mon exécutable a la place indiquée :)

Tout content je décide de tester avec PB... et la :twisted: :twisted: :twisted: ###Error : The user is dead cause of a malfuction in his brain### Bref j'ai cramé trop de neurones, a cause de ca :

Code : Tout sélectionner

Compilateur = RunProgram("D:\Program Files (x86)\NXT\NBCCompiler\nbc.exe","+ -O=D:\robotest.rxe + struct.nxc ", "", #PB_Program_Open | #PB_Program_Read);memes params que pour windows
  Sortie$ = ""
  If Compilateur 
    While ProgramRunning(Compilateur)
      If AvailableProgramOutput(Compilateur)
        Sortie$ + ReadProgramString(Compilateur) + Chr(13)
      EndIf
    Wend
    Sortie$ + Chr(13) + Chr(13)
    Sortie$ + "Code de retour : " + Str(ProgramExitCode(Compilateur))
    
    CloseProgram(Compilateur) ; Ferme la connection vers le programme
  EndIf
  
  MessageRequester("Sortie", Sortie$)
C'est l'exemple de la doc de PB pour RunProgram(, avec mon compilateur et ses paramétres comme programme a lancer, comme tout à l'heure dans le raccourci de Windows... Seulement voila, rien ne marche, le fichier rxe (executable pour mon robot) n'est pas créé, le compilateur nbc.exe retourne 1 comme code de sortie (ce qui n'est pas normal).

Par contre, quand on passe "-help" au compilo, il affiche bien son fichier d'aide :

Code : Tout sélectionner

RunProgram("D:\Program Files (x86)\NXT\NBCCompiler\nbc.exe","+ -help"
et retourne 0 (c'est normal)
Même avec RunProgram(....

Alors j'ai fait un mini prog qui renvoie les paramétres qu'on lui a passés dans un MessageRequester :

Code : Tout sélectionner

For i=0 To CountProgramParameters()
  param$ = param$ + ProgramParameter() + ","
Next
MessageRequester("Paramétres", param$)
Je l'ait compilé et mis dans le même dossier que mon compilo nbc, puis je l'ait testé avec les paramétres que j'avait mis au début ("+ -O=D:\robotest.rxe + struct.nxc "), avec un raccourci Windows, puis avec RunProgram....

Et c'est là que la logique s'arrête, que l'utilisateur plante son cerveau, et que le monde s'effondre :mrgreen: :mrgreen:

Avec Windows : (extrait du MessageRequester)
---------------------------
Paramétres
---------------------------
+,-O=D:\monexecutablerobot.rxe,+,moncodesource.nxc,,
---------------------------
OK
---------------------------


Et avec RunProgram :
---------------------------
Paramétres
---------------------------
+,-O=D:\monexecutablerobot.rxe,+,moncodesource.nxc,,
---------------------------
OK
---------------------------


:roll: :twisted: :x :? 8O :mad: :roll:

C'est les mêmes !!!

Si RunProgram a bien passé les mêmes paramétres que le raccourci Windows au compilateur nbc, comment est-ce possible qu'avec RunProgram, ca n'ait pas fonctionné????

***L'utilisateur JohnJohnsonSHERMAN a planté. Veuillez le redémarrer.***
:?:

Re: Bug de RunProgram( ??

Publié : sam. 09/juil./2016 16:55
par Zorro
faut peut etre utiliser le mode Administrateur !??

essaye avec Shellexecute (le pendant API windows de la commande Runprg() )

exemple pour lancer notepad en Mode Administrateur :

Code : Tout sélectionner

;Autor: ts-soft

EnableExplicit

Procedure.i RunProgramAsAdmin(ProgramName$, Parameter$)
	Protected info.SHELLEXECUTEINFO, exe.s
	
	If ProgramName$
		info\hwnd            = GetForegroundWindow_()
		info\cbSize          = SizeOf(SHELLEXECUTEINFO)
		info\lpVerb          = @"runas" ;<--------- c'est ça qui passe en administrateur ;o)
		info\lpFile          = @ProgramName$
		info\lpParameters    = @Parameter$
		info\nShow           = #SW_SHOWNORMAL
		ProcedureReturn ShellExecuteEx_(info)
	EndIf
EndProcedure

debug RunProgramAsAdmin("notepad.exe", "")


Re: Bug de RunProgram( ??

Publié : sam. 09/juil./2016 17:31
par JohnJohnsonSHERMAN
Encore une fois, c'est moi qui me suis pris la tête... :oops: :roll: :oops: décidément ca vaudrait mieux que j'arrête de poster des conneries...

J'avais juste pas écris correctement les paramétres... enfin en tout cas y'avait bel et bien un probléme, mais non pas sur RunProgram, contrairement à ce que j'ai cru tout d'abord, mais bien dans le compilateur nbc. Le paramétre "-O=<filename>" qui lui indique de créér l'exécutable a un endroit précis semble ne pas fonctionner correctement. En utilisant le téléchargement direct ( "-d" + "-S=usb"), le programme se télécharge sur mon robot et fonctionne trés bien !

Donc je m'excuse de t'avoir dérangé Zorro :oops: , et sur ce je préviens par mail le créateur de ce compilateur buggé... mais qui marche quand même en fin de compte :mrgreen:

Je suis (déjà) (loin) :arrow: :arrow: :arrow: dehors...