-
[C++] fonction system
Bonjour,
je souhaiterai lancer un navigateur web, à une page particulière, depuis mon application en C++ mais sans utiliser le navigateur par défaut.
j'ai essayé où
mycommand est de la forme
Code:
"c:\blabla\firefox.exe" "c:\mapage\blabla\index.html"
mais ça ne marche pas :?
Car en tapant la même commande (affichée dans un log, copier/coller) dans une invite de commande, ça marche grr !
Quelqu'un saurait pourquoi ?
Merci :)
-
tu n'as pas oublié de doubler les backslashs par hasard
Code:
"c:\\blabla\\firefox.exe" "c:\\mapage\\blabla\\index.html"
-
non, j'ai marqué ici le résultat de la chaine tel qu'il est inscrit dans les log, mais ils sont bien doublés lorsque je les construit... Malheureusement :(
-
Essaie plutôt avec CreateProcess, je pense... Tu peux avoir soit un problème de droits, soit un problème de ligne de commande (peu probable, une page HTML lancée ainsi s'ouvre correctement habituellement).
-
mais pour cela je dois inclure des librairies supplémentaires ?
Car je souhaite ne dépendre que de gtk et des librairies c++ usuelles
-
Tu vas dépendre de Windows (enfin, de son API Win32) pour utiliser CreateProcess... Ce qui n'est pas à priori un problème, vu le forum dans lequel tu as posté.
-
drKzs : system("\"C:\\Program Files\\Firefox\\firefox.exe\" \"...\"");
Sinon passe directement à CreateProcess comme te l'indique Mac LAK.
-
De toutes façon, la fonction system pose un souci non négligeable (cf. MSDN : system) : elle appelle l'interpréteur de commandes, ce qui peut poser de multiples problèmes :
- Incapacité à gérer les noms UNC (noms réseau),
- Création d'une fenêtre de console pas toujours évidente à planquer si l'on a lancé un exécutable en mode graphique (elle reste ouverte, noire, et bouffant de la place à l'écran).
- Incapacité à surveiller le processus engendré de façon simple.
- Incapacité à récupérer la sortie du processus en temps réel (obligation d'attendre la fin du processus en ayant redirigé les sorties standard vers un fichier).
Bref, dans de multiples cas, "system" est une vraie plaie et seul CreateProcess permet d'effectuer l'opération requise...
A noter que pour un lancement asynchrone et non surveillé d'un élément (typiquement, l'ouverture d'un fichier de documentation / licence / information), il est préférable d'utiliser la fonction ShellExecute, plus pratique.
-
Je reviens fermer qq sujets
Ok, merci pour ces réponses :)
Il s'agit d'un appel très simple, je ne souhaite pas forcément que ce soit optimum. J''ai utilisé spawn_command_line_async de la Glib, ça fonctionne nickel :)