Variable d'environnement

Résolu/Fermé
heliconius Messages postés 539 Date d'inscription mardi 1 juillet 2008 Statut Membre Dernière intervention 23 juin 2023 - 5 oct. 2013 à 01:15
heliconius Messages postés 539 Date d'inscription mardi 1 juillet 2008 Statut Membre Dernière intervention 23 juin 2023 - 8 oct. 2013 à 16:41
Bonjour,

Quelqu'un peut-il me dire s'il est possible en C de créer une variable d'environnement qui restera valide, même le programme terminé ?

En fait, il s'agirait d'un programme exécutable destiné seulement à créer une variable d'environnement qui sera utilisée par d'autres programmes qui seront exécutés par la suite.

Merci beaucoup pour votre aide.

2 réponses

Utilisateur anonyme
8 oct. 2013 à 12:03
Bonjour,

Si tu cherches à conserver le contenu d'une variable après fermeture du programme, tu peux sans doute l'enregistrer dans un fichier, as-tu cherché dans cette direction?
0
heliconius Messages postés 539 Date d'inscription mardi 1 juillet 2008 Statut Membre Dernière intervention 23 juin 2023 139
8 oct. 2013 à 13:48
Bonjour,

merci pour ta réponse.
En fait, quand on insère une clef USB elle peut prendre pour lettre F: ou H: ou K: selon les disques déjà existants sur la machine où elle est placée.

J'ai appris comment récupérer, par un exécutable réalisé en C, la lettre du lecteur à partir duquel l'exécutable est lancé. Le tout, maintenant, est de compléter ce programme en C pour placer cette lettre parmi les autres variables d'environnement comme si, à la main, j'avais tapé : set USBDRIVE=G: et ensuite, une fois exécuté, le programme s'arrête en laissant cette variable qui pourra être utilisée par d'autres programmes déjà existants et qui ne sont pas conçus pour aller chercher cette lettre dans un fichier mais dans les variables d'environnement.

J'espère ne pas avoir été confus dans mon explication.
0
[Dal] Messages postés 6193 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 4 juillet 2024 1 089
Modifié par [Dal] le 8/10/2013 à 15:58
Salut heliconius,

Sous Windows, c'est compliqué. C'est résumé là : Environment Variables

Avec l'API Windows, tu peux utiliser SetEnvironmentVariable, mais cela ne pourra avoir un effet que dans le processus qui lance cette fonction et ses processus fils.

Si tu veux que le changement soit permanent, tu dois insérer la variable dans le registre à
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment
et envoyer un message
WM_SETTINGCHANGE
avec l'option "Environment".

Tu fais cela avec RegCreateKeyEx et SendMessage.

De cette façon, les nouveaux processus lancés par explorer.exe, même non créés (lancés) par ton application y auront accès. Cependant, cela ne sera (probablement.. à tester) pas le cas du cmd.exe dans lequel tu auras éventuellement lancé ton programme (car il a été lancé *avant*) à moins de rebooter ton ordinateur, ou d'exécuter un .bat dans le terminal ouvert modifiant l'environnement pour ce cmd.exe.


Dal
0
heliconius Messages postés 539 Date d'inscription mardi 1 juillet 2008 Statut Membre Dernière intervention 23 juin 2023 139
Modifié par heliconius le 8/10/2013 à 16:42
Merci encore une fois pour cette réponse complète.

Je pensais toujours à mon projet de MySQL Portable sur clef USB.
Une fois ma clef insérée et son menu mis en place, plutôt que redéfinir les fichiers ini seulement à l'ouverture du terminal, j'avais pensé intégrer ce programme de réécriture des ini lors du processus de mise en place du menu et, tant qu'à faire, au cas où, écrire dans une variable d'environnement la lettre du lecteur pour ne plus avoir besoin de la rechercher.

Mais je me rends compte, comme tu dis, que ça risque d'être pour moi un brin compliqué :)
De toutes façons, je crois qu'avec Windows, c'est toujours compliqué ! :)

Soyons modeste et contentons-nous de ce qu'on a.
En tout cas, merci et je clos le sujet.
0