[OK] Bug de RunProgram( ??

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
JohnJohnsonSHERMAN
Messages : 648
Inscription : dim. 13/déc./2015 11:05
Localisation : Allez, cherche...
Contact :

[OK] Bug de RunProgram( ??

Message 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.***
:?:
Dernière modification par JohnJohnsonSHERMAN le sam. 09/juil./2016 17:39, modifié 1 fois.
"Le bug se situe entre la chaise et le clavier"
Votre expert national en bogage et segfaults.

CPU : AMD A8 Quad core - RAM 8Gb - HDD 2To
  • Windows 10 x64 - PB 5.61 x64
  • Linux Ubuntu 16.04 LTS x64 (dual boot) - PB pas encore réinstallé
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: Bug de RunProgram( ??

Message 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", "")

Avatar de l’utilisateur
JohnJohnsonSHERMAN
Messages : 648
Inscription : dim. 13/déc./2015 11:05
Localisation : Allez, cherche...
Contact :

Re: Bug de RunProgram( ??

Message 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...
"Le bug se situe entre la chaise et le clavier"
Votre expert national en bogage et segfaults.

CPU : AMD A8 Quad core - RAM 8Gb - HDD 2To
  • Windows 10 x64 - PB 5.61 x64
  • Linux Ubuntu 16.04 LTS x64 (dual boot) - PB pas encore réinstallé
Répondre