Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
592 connectés 

  FORUM HardWare.fr
  Programmation
  C

  executer un programme de cygwin dans l'environnement windows

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

executer un programme de cygwin dans l'environnement windows

n°1903194
BinItsMeKo​i
Posté le 07-07-2009 à 14:46:35  profilanswer
 

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 :

Code :
  1. #include <windows.h>
  2. #include <process.h>
  3. #include <stdio.h>
  4. int main()
  5. {
  6.     STARTUPINFO    si;
  7.     PROCESS_INFORMATION  pi;
  8.     GetStartupInfo(&si);
  9.     CreateProcess(NULL, "cmd /c set",  // Name of app to launch
  10.   NULL,      // Default process security attributes
  11.   NULL,      // Default thread security attributes
  12.   FALSE,      // Don't inherit handles from the parent
  13.   0,      // Normal priority
  14.   NULL,      // Use the same environment as the parent
  15.   NULL,      // Launch in the current directory
  16.   &si,      // Startup Information
  17.   &pi);      // Process information stored upon return
  18.     printf("Done.\n" );
  19.     exit(0);
  20.     return 0;
  21. }


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 ! :bounce:  :bounce:  :bounce:  :bounce:


Message édité par BinItsMeKoi le 09-07-2009 à 10:33:37
mood
Publicité
Posté le 07-07-2009 à 14:46:35  profilanswer
 

n°1903235
theshockwa​ve
I work at a firm named Koslow
Posté le 07-07-2009 à 16:02:49  profilanswer
 

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

Message cité 1 fois
Message édité par theshockwave le 07-07-2009 à 16:04:35

---------------
last.fm
n°1903248
olivthill
Posté le 07-07-2009 à 16:21:24  profilanswer
 

Je plussoie.
Utiliser SetEnv() ou SetEnvironmentVariable() depuis le programme C au lieu de lancer cmd.

n°1903252
BinItsMeKo​i
Posté le 07-07-2009 à 16:31:48  profilanswer
 

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 ?
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'environnements, c'est certain que tu auras moyen de le faire directement via l'api de windows, sans passer par un interpréteur de commandes


 
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...) !


Message édité par BinItsMeKoi le 07-07-2009 à 16:51:58
n°1903259
BinItsMeKo​i
Posté le 07-07-2009 à 16:42:26  profilanswer
 

olivthill a écrit :

Je plussoie.
Utiliser SetEnv() ou SetEnvironmentVariable() depuis le programme C au lieu de lancer cmd.


 
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 !


Message édité par BinItsMeKoi le 07-07-2009 à 16:43:30
n°1903318
olivthill
Posté le 07-07-2009 à 18:53:44  profilanswer
 

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.

n°1903452
BinItsMeKo​i
Posté le 08-07-2009 à 10:03:52  profilanswer
 

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.
 
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.


 
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é !!!???

Message cité 1 fois
Message édité par BinItsMeKoi le 08-07-2009 à 11:04:14
n°1903494
theshockwa​ve
I work at a firm named Koslow
Posté le 08-07-2009 à 11:31:46  profilanswer
 

BinItsMeKoi a écrit :


 
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é !!!???


 
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 ?


---------------
last.fm
n°1903538
BinItsMeKo​i
Posté le 08-07-2009 à 12:08:03  profilanswer
 

theshockwave 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 ?


 
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 !


Message édité par BinItsMeKoi le 08-07-2009 à 12:17:19
n°1903550
theshockwa​ve
I work at a firm named Koslow
Posté le 08-07-2009 à 12:24:22  profilanswer
 

ok, là, je vois mieux :)


---------------
last.fm
mood
Publicité
Posté le 08-07-2009 à 12:24:22  profilanswer
 

n°1903585
BinItsMeKo​i
Posté le 08-07-2009 à 13:55:31  profilanswer
 

theshockwave a écrit :

ok, là, je vois mieux :)


ouf ! mais ca n'avance pas le schmilblick ...  :wahoo:


Message édité par BinItsMeKoi le 08-07-2009 à 13:56:14
n°1903613
theshockwa​ve
I work at a firm named Koslow
Posté le 08-07-2009 à 14:33:22  profilanswer
 

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 )


---------------
last.fm
n°1903756
Stephen135
Posté le 08-07-2009 à 16:32:51  profilanswer
 

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) !

n°1903831
BinItsMeKo​i
Posté le 08-07-2009 à 17:52:03  profilanswer
 

Stephen135 a écrit :


 
cf. archives Google Groups : c'est la même méthode depuis ...Windows 95  (32-bits) !


 
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 ...

n°1903951
BinItsMeKo​i
Posté le 09-07-2009 à 10:31:59  profilanswer
 

je n'y arrive toujours pas !  Y a t-il d'autres solutions ?

n°1903961
theshockwa​ve
I work at a firm named Koslow
Posté le 09-07-2009 à 10:46:11  profilanswer
 

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


Message édité par theshockwave le 09-07-2009 à 11:07:06

---------------
last.fm
n°1904612
Emmanuel D​elahaye
C is a sharp tool
Posté le 11-07-2009 à 16:34:08  profilanswer
 

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...
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1904989
Pat333
Posté le 13-07-2009 à 18:47:32  profilanswer
 

Emmanuel Delahaye a écrit :


tout le monde est censé savoir consulter les archives de Usenet et qu'il faut se débrouiller avec...


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...
 

n°1904991
Emmanuel D​elahaye
C is a sharp tool
Posté le 13-07-2009 à 19:34:26  profilanswer
 

Pat333 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...
 


Ha ha ! Pat133 se parle à lui-même (Stephen135)...
 [:roxelay]


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1910376
BinItsMeKo​i
Posté le 30-07-2009 à 16:37:39  profilanswer
 

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


Message édité par BinItsMeKoi le 30-07-2009 à 16:43:25
n°1912207
BinItsMeKo​i
Posté le 06-08-2009 à 10:25:57  profilanswer
 

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"

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  executer un programme de cygwin dans l'environnement windows

 

Sujets relatifs
[Resolu]Adaptation programme Windows vers LinuxRSH depuis linux vers Windows 2003 ...
Executer un ".vbs" à partir d'une page webrécuperer les evenement windows
Probléme pour récuperer le nom du Fichier API WindowsProgrammation emacs ss windows
Windows CE 6 & Gestion d'encresJavascript pour récupérer le HWND d'une fenêtre Windows
Fermeture d'application par mon programme 
Plus de sujets relatifs à : executer un programme de cygwin dans l'environnement windows


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR