Variables d'environnement

Résolu/Fermé
isold Messages postés 54 Date d'inscription samedi 8 mars 2014 Statut Membre Dernière intervention 30 août 2016 - 6 avril 2015 à 13:49
isold Messages postés 54 Date d'inscription samedi 8 mars 2014 Statut Membre Dernière intervention 30 août 2016 - 6 avril 2015 à 23:01
Bonjour,

Je ne suis pas une experte en langage C (avec Code::Block) mais je suis arrivée plus ou moins à ce que je voulais mais il y a encore du travail à faire...
Voilà, je veux pouvoir modifier une variable d'environnement (lettre du lecteur courant) qui sera utilisée par la suite dans un batch. Voici mon programme :

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

int main(int argc, char **argv)
{
    char st_prog_path[MAX_PATH];
    char lettre;

    // Récupération lettre du lecteur courant
    if (GetModuleFileName(NULL, st_prog_path, MAX_PATH))
    {
        lettre = st_prog_path[0];
    }
    else
    {
        printf("Error: GetModuleFileName a retourné une erreur");
    }

    printf("%c:\n", lettre);

    return 0;
}


A l'heure actuelle, quand on lance le programme (whatdisk.exe), il affiche la lettre du lecteur suivi de : Exemple :
P:\cmd>whatdisk.exe
P:
P:\cmd>


J'aimerais que cette valeur soit conservée dans les variables d'environnement comme si on avait tapé au niveau du shell "set DISK=P:". Mais je ne sais pas comment faire. La variable %DISK% sera utilisée par la suite dans un batch.

J'ai essayé "set disk=|whatdisk.exe" : ça m'affiche la lettre sur la console mais ça n'ajoute pas la variable DISK
J'ai essayé "whatdisk.exe|set disk=" : ça s'exécute mais ça n'affiche rien ni à la console ni dans les variables.
Je me demande si ne je ne devrais pas, directement en C, modifier les variables de façon durable avec un truc du genre execve(), exec(), system() mais je ne sais pas comment faire non plus.

Quelqu'un pourrait-il m'aider ?
Merci beaucoup.

1 réponse

Salut, en script batch j'aurais plus vu un truc du genre
for /f "delims=" %%a in ('whatdisk.exe') do @set DISK=%%a
et en ligne de commande
for /f "delims=" %a in ('whatdisk.exe') do @set DISK=%a
0
isold Messages postés 54 Date d'inscription samedi 8 mars 2014 Statut Membre Dernière intervention 30 août 2016 5
Modifié par isold le 6/04/2015 à 15:41
Merci JwTdd :-)
Sur mon PC ça marche bien et j'ai donc déjà une solution pour résoudre le problème.

Il reste celle du programme C. Comment dans le programme whatdisk.c j'aurais pu directement modifier les variables d'environnement ? Si je n'ai pas de solution concernant ce dernier point, j'ai au moins celle que tu m'as proposée et qui fonctionne bien. Merci beaucoup, donc... ;-)
0
isold Messages postés 54 Date d'inscription samedi 8 mars 2014 Statut Membre Dernière intervention 30 août 2016 5
6 avril 2015 à 15:39
Merci JwTdd :-)
Sur mon PC ça marche bien et j'ai donc déjà une solution pour résoudre le problème.

Il reste la solution C. Comment dans le programme whatdisk.c j'aurais pu directement modifier les variables d'environnement ? Si je n'ai p
0
peut être
system( "set DISK="+lettre );

je crois que tu n'a pas le choix, si tu utilises putenv() par exemple il me semble que ça n'affectera que les programmes appelé par le programme mais n'affecteras pas l'environnement parent.
0
isold Messages postés 54 Date d'inscription samedi 8 mars 2014 Statut Membre Dernière intervention 30 août 2016 5 > JwTdd
6 avril 2015 à 23:01
Je vais essayer system("set DISK="+lettre);
Mais si je n'arrive pas, ce n'est pas grave. C'est vrai que l'idéal eût été la solution toute C, mais c'est juste quelque chose pour moi et non pas que je je dois fournir. Comme cela marche très bien, je vais faire avec et ça ira très bien.
En tout cas, je te remercie beaucoup pour ton aide...
Peut-être un jour te rendrais-je la pareille dans un autre domaine, qui sait ? ;-)
Fil clos pour problème résolu. Merci.
0