Variables d'environnement

Résolu
isold Messages postés 57 Date d'inscription   Statut Membre Dernière intervention   -  
isold Messages postés 57 Date d'inscription   Statut Membre Dernière intervention   -
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

JwTdd
 
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 57 Date d'inscription   Statut Membre Dernière intervention   5
 
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 57 Date d'inscription   Statut Membre Dernière intervention   5
 
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
JwTdd
 
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 57 Date d'inscription   Statut Membre Dernière intervention   5 > JwTdd
 
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