executer un programme de cygwin dans l'environnement windows - C - Programmation
Marsh Posté le 07-07-2009 à 16:02:49
tes variables d'environnements que tu définis avec set sont uniquement pour le process courant et éventuellement les processus fils (suivant la manière dont on les crée) c'est vraiment ce que tu veux ?
Si tu doubles cliques sur un programme par la suite, que tu lances ton set dans cygwin ou non, le programme que tu lances n'en aura pas conscience
Edit : En tout cas, ta demande ne me parait vraiment pas claire ... Si tu veux mettre en place des variables d'environnement, c'est certain que tu auras moyen de le faire directement via l'api de windows, sans passer par un interpréteur de commandes
Marsh Posté le 07-07-2009 à 16:21:24
Je plussoie.
Utiliser SetEnv() ou SetEnvironmentVariable() depuis le programme C au lieu de lancer cmd.
Marsh Posté le 07-07-2009 à 16:31:48
theShOcKwAvE a écrit : tes variables d'environnements que tu définis avec set sont uniquement pour le process courant et éventuellement les processus fils (suivant la manière dont on les crée) c'est vraiment ce que tu veux ? |
as-tu suivi mes instructions ? si oui, tu as du voir que le "set" dans windows retourne des variables d'environnement différent qu'un "set" dans cygwin !!
moi ce que je veux c'est :
sans retourner dans l'environnement windows (soit dans cygwin) exécuter en ligne de commande mes .exe sans que l'interpréteur de commande de cygwin n'intervienne ! ainsi mes programmes s'executeront pareillement que si l'on passe par windows !
Je pense pour y arriver, créer un process et forcer son execution dans l'environnement windows ! Ce process ensuite sera charger d'exécuter mes programmes ! Tout ceci (j'insiste), sans quitter cygwin sinon je ne poserais pas la question .
En effet, cygwin ne sert à rien dans ce cas concret ! Mais je l'utilise avant (notamment en temps que gestionnaire de paquet...) !
Marsh Posté le 07-07-2009 à 16:42:26
olivthill a écrit : Je plussoie. |
ok ok ! en gros tu me dis que si les variables d'environements de cygwin sont différentes de celles de windows faut que je redéfinisse l'environnement de cygwin pour qu'il soit comme celui de windows !
C'est de la grosse bidouille ! Mais de toute facon je ne peux pas le faire car les programmes que je lance ne sont pas écrit par moi et les environnements, sur lesquels ces programmes fonctionnent, changent selon la becane !
Marsh Posté le 07-07-2009 à 18:53:44
Désolé, je n'avais pas compris que derrière ce changement de variables il y avait des lancements de programmes dont le code n'est pas modifiable.
Peut-être qu'une solution serait de générer un fichier ".bat", à la volée, qui aurait une définition des variables, suivi du lancement des autres programmes.
Marsh Posté le 08-07-2009 à 10:03:52
olivthill a écrit : Désolé, je n'avais pas compris que derrière ce changement de variables il y avait des lancements de programmes dont le code n'est pas modifiable. |
c'est en effet l'une des dernières solutions a envisager car ca entraine trop de travail derrière (et reste un peu bricolage malgrès tout).
=> Il doit forcément exister un moyen pour cygwin de SORTIR DE SON ENVIRONNEMENT emulé !!!???
Marsh Posté le 08-07-2009 à 11:31:46
BinItsMeKoi a écrit : |
Du point de vue variables d'environnement, il n'y a pas vraiment d'émulation dans cygwin. Cygwin en définit juste quelques unes et tous les processus qu'il lance en héritent, c'est tout. Je ne comprends toujours pas quel est ton problème. Tu veux qu'il n'aie pas certaines variables d'environnement qui sont définies sous cygwin ?
Parce qu'en soit, si le programme que tu lances est un programme cygwin (linkant avec la DLL de cygwin) tu ne pourras pas l'empêcher de le faire quoi que tu fasses ... Et si le programme n'utilise pas cygwin, alors il n'y a pas de couche d'émulation, donc où est le souci ?
Marsh Posté le 08-07-2009 à 12:08:03
theShOcKwAvE a écrit : |
je ne suis pas le seul sur ce problème et je te garantie qu'une dizaine de variables d'environnements sont écrasées par cygwin (sans parler des variables rajoutées on est d'accord). Le PATH par exemple fait parti des variables d'environnements ! Je ne peux me permettre de sauvegarder ces dernières car cygwin dans ce cas deviendrait instable !
ce sont des setup que je lance à partir de cygwin ! Toutes mes commandes hérite de cet environnement ! J'aimerai bien que "le programme n'utilise pas cygwin" mais à partir de cygwin est-ce possible !??
Désolé que tu ne me comprennes pas ! Je pense pourtant être clair !
Marsh Posté le 08-07-2009 à 12:24:22
ReplyMarsh Posté le 08-07-2009 à 13:55:31
theShOcKwAvE a écrit : ok, là, je vois mieux |
ouf ! mais ca n'avance pas le schmilblick ...
Marsh Posté le 08-07-2009 à 14:33:22
Oui, l'idée serait donc de parvenir à retrouver les variables d'environnement "par défaut" de Windows (ou peut-être plutôt celles du processus parent de cygwin), mais en survolant la msdn, je n'ai vu ni de moyen de récupérer les variables d'environnement d'un process donné, ni de moyen de récupérer les variables d'environnement "par défaut (qui doivent être settées par utilisateur ...) peut-être que tu trouveras tout ca dans la base de registre, reste à savoir à quelle clé ... et que tu pourras construire toi-même la structure d'environnement à passer à ton CreateProcess (pour l'exemple, tu as un truc sympa là : http://msdn.microsoft.com/en-us/li [...] S.85).aspx )
Marsh Posté le 08-07-2009 à 16:32:51
theShOcKwAvE a écrit : Oui, l'idée serait donc de parvenir à retrouver les variables d'environnement "par défaut" de Windows (ou peut-être plutôt celles du processus parent de cygwin), mais en survolant la msdn, je n'ai vu ni de moyen de récupérer les variables d'environnement d'un process donné, ni de moyen de récupérer les variables d'environnement "par défaut |
cf. archives Google Groups : c'est la même méthode depuis ...Windows 95 (32-bits) !
Marsh Posté le 08-07-2009 à 17:52:03
Stephen135 a écrit : |
Stephen135=> heu ... peut-être as-tu une réponse plus développée à fournir parce que pour moi c'est un peu maigre ! sorry
theshockwave=> génial ton lien ! Je creuse encore ...
Marsh Posté le 09-07-2009 à 10:31:59
je n'y arrive toujours pas ! Y a t-il d'autres solutions ?
Marsh Posté le 09-07-2009 à 10:46:11
je viens de regarder un peu, tu peux trouver les variables d'environnement utilisateur dans HKEY_CURRENT_USER/Environment dans la base de registre. Il te suffit de parcourir toutes les entrées dedans, j'imagine que tu devrais t'en sortir.
Apparamment, les variables d'environnement système sont dans HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/SessionManager/Environment et pareil, tu peux itérer sur les entrées ici. Normalement, en cumulant les deux et dans le bon ordre (d'abord les variables système, ensuite les variables utilisateur, j'imagine) tu dois pouvoir remplir ta structure correctement et la passer à ton process que tu crées.
Si tu as un souci, n'hésite pas à poser une question précise
Edit : petite précision qui peut être utile : ces entrées sont là sur mon XP 32 bits, je ne peux pas garantir qu'elles y seront sur une autre version de windows
Marsh Posté le 11-07-2009 à 16:34:08
BinItsMeKoi a écrit : Stephen135=> heu ... peut-être as-tu une réponse plus développée à fournir parce que pour moi c'est un peu maigre ! |
Sache que Stephen135 ne répond jamais aux réactions qu'il suscite. Il est surnommé "one-shot" ou "the missile".
En gros il considère que tout le monde est censé savoir consulter les archives de Usenet et qu'il faut se débrouiller avec...
Marsh Posté le 13-07-2009 à 18:47:32
Emmanuel Delahaye a écrit : |
Et il a raison.
Plus personne ne fait l'effort de chercher sur google ou google groups maintenant.
Quand on voit des questions dont la réponse est immédiate par google, et qui date de 15 ou 20 ans...
Marsh Posté le 13-07-2009 à 19:34:26
Pat333 a écrit : |
Ha ha ! Pat133 se parle à lui-même (Stephen135)...
Marsh Posté le 30-07-2009 à 16:37:39
ce qui se passe à l'exécution de cygwin :
processWINDOWS -----création process---->processCYGWIN
processCYGWIN hérite de l'environnement du processWINDOWS puis processCYGWIN modifie son environnement !
comment lancer un programme par le processWINDOWS du processCYGWIN ?(ce qui me semble impossible)
ou, une alternative :
comment créer un nouveau processWINDOWS à partir de processCYGWIN ?
Merci d'avance
Marsh Posté le 06-08-2009 à 10:25:57
ouahouuu !
UN GRAND MERCI A
===>"Mac LAK" du forum www.developpez.net<====
Et à toutes les personnes qui ont pris de leur temps pour me trouver une réponse.
ça marche trop bien !
Le problème est résolu : runas /noprofile /user:USER "cmd"
Marsh Posté le 07-07-2009 à 14:46:35
Sujet :
demande renseignement plus détaillé sur la fonction createprocess dont la doc msdn est à l'adresse suivante :
http://msdn.microsoft.com/en-us/li [...] S.85).aspx
Problème:
J'utilise cygwin et lorsqu'on fait sous cygwin un :
"cmd /c set"
on obtient des variables d'environnements différentes que lorsqu'on fait sous windows (win+R => "cmd" ) :
set
logique car cygwin surcouche API de windows. Ne me demander pas pourquoi (trop complexe) mais j'ai une exigence de vouloir exécuter un .bat de cygwin dans l'environnement wiindows ! comment fait-on ?
je pense utiliser un programme du genre :
ce programme crée un process qui lance dans une fenetre ms-dos le fameux "set". Cependant l'environnement reste le même que le process parent. Je pense que le 7eme parametre de la fonction "CreateProcess" permet de changer d'environnement.
un petit conseil de geek SVP !
Message édité par BinItsMeKoi le 09-07-2009 à 10:33:37