Travailler dans program files

Résolu
bachdorches Messages postés 8 Date d'inscription lundi 13 juin 2005 Statut Membre Dernière intervention 19 octobre 2005 - 26 août 2005 à 09:45
bachdorches Messages postés 8 Date d'inscription lundi 13 juin 2005 Statut Membre Dernière intervention 19 octobre 2005 - 1 sept. 2005 à 15:18
Mon pb. semble un peu bête ou basic.

Premier pt.
Je veux installer le dossier de mon application dans c:\program Files de Windows à partir d'un fichier autoextractible (SFX), puis en executer deux fichiers (.exe et .reg via regedit /s).
Le problème est que je n'arrive pas à constituer le chemin c:\program files\mon_appli\pt.exe ni dans Winrar ni dans mon .cpp.
Evidement, j'ai essayé plusieurs écritures:
system("md c:\\program files\\dataxo");
system("md c:\\"program files"\\dataxo");
system("md c:\\'program files'\\dataxo");
également par concaténation de variables : getenv("ProgramFiles") et strcat.
Est ce que c'est une histoire de formats d'écriture ? de fonction particulière à utiliser ? ...

Deuxième pt., : utilisation de getenv
char *chem1a,*chem1b;
...
chem1=chem1b=getenv("SystemRoot"); // à ce moment chem1a et chem1b contiennent c:\windows
strcat(chem1a,"[file://system32/ \\system32]"); //
...
Mon blocage, à ce niveau est que, avec ces lignes de code, chem1a et chem1b contiennent tous les deux : c:\windows\system32 (pourquoi chem1b ?)

Merci d'avance, (pour cette rqte et pour tout le reste)

7 réponses

bachdorches Messages postés 8 Date d'inscription lundi 13 juin 2005 Statut Membre Dernière intervention 19 octobre 2005
30 août 2005 à 13:31
Brunews, Mezaya,
Merci à vous deux.
Je teste tout ça et vous tiendrai au courant.
a+
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
26 août 2005 à 09:59
SHGetSpecialFolderPath pour retrouver les dossiers.

chem1a doit pointer sur un buffer.

ciao...
BruNews, MVP VC++
0
mezaya Messages postés 202 Date d'inscription dimanche 18 mai 2003 Statut Membre Dernière intervention 6 mars 2010
26 août 2005 à 13:46
Chem1 et Chem1b pointent tout les deux sur la même zone mémoire. C'est pourquoi Chem1a et Chem1b seront toujours identique.

Voili,Voilou
0
bachdorches Messages postés 8 Date d'inscription lundi 13 juin 2005 Statut Membre Dernière intervention 19 octobre 2005
29 août 2005 à 16:56
BruNews,
"chem1a doit pointer sur un buffer", tu veux dire que buffer est un type de variable? je ne vois pas bien ce que tu veux dire.

mezaya,
C'est bien ce qui semble se passer, mais pourquoi, ça doit faire partie des choses que j'ai mal compris.
char *chem1a,*chem1b pointent sur un type char, pourquoi pointeraient ils sur une même adresse (d'une var de type char)??

Autre question, je veux récupérer l'OS sur lequel mon appli tourne.
J'ai croisé une appli qui travaille à partir des valeurs de _winmajor et _winminor mais je génére plein d'erreurs à la compilation (je travaille avec le compilateur gratuit de Borland BCC5.5)
Ces var. sont supposées être définies dans stdlib.h (pas chez moi en tout cas).
Est ce que qq'un peut m'éclairer ?
Merci, a+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mezaya Messages postés 202 Date d'inscription dimanche 18 mai 2003 Statut Membre Dernière intervention 6 mars 2010
29 août 2005 à 17:21
essaye plutot ça :



chem1b=getenv("SystemRoot");



// allocation de la mémoire pour pouvoir enregistrer ton chemin.

chem1a = (char*)malloc( strlen(chem1b) + strlen("[file://system32/ \\system32]")+1 );



// copie la chaine de caractère de chem1b dans chem1a

strcpy( chem1a , chem1b );

// ici chem1a et chem1b pointent sur 2 zones mémoires différent grâce au malloc()

// donc lors de la concatègnation de chem1a, seul celui-ci sera affecter



// concatègne la chaine de caractèere de chem1a et "\\system32"

strcat(chem1a,"[file://system32/ \\system32]");



// n'oublie pas de libérer la mémoire avec un free( chem1a );



tu peut aussi allouer avec une valeur fixe ex : 256. Mais prend garde a
ce que les chaines ne dépasse jamais 255 caractères ( +
caractères de fin de chaine '\0' = 256 ).

Voili,Voilou
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
29 août 2005 à 17:24
strcat(chem1a,"[file://system32/ \\system32]");
J'espère que chem1a est initialisé comme pointer.
exemple:
char buf[300]; // voila un buffer, 300 octets de réservés
chem1a = buf; // chem1a pointe maintenant sur adresse de buf, là oui il est initialisé

GetVersionEx() pour avoir la version courante de Windows.
Utiliser des variables soi-disants toutes prêtes est une énorme connerie, ça insèrerait dans ton prog un tas de code que tu ne maitriserais pas.

Exemple, retourne 1 si est XP sinon 0.

DWORD VerifWinXP()
{
OSVERSIONINFO osvi; osvi.dwBuildNumber osvi.dwMajorVersion 0;
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx(&osvi);
if(osvi.dwPlatformId != VER_PLATFORM_WIN32_NT) return 0; return ((osvi.dwMinorVersion 1) && (osvi.dwMajorVersion 5));
}

Ultra simple, non ?

ciao...
BruNews, MVP VC++
0
bachdorches Messages postés 8 Date d'inscription lundi 13 juin 2005 Statut Membre Dernière intervention 19 octobre 2005
1 sept. 2005 à 15:18
Brunews, Mezaya,

Tests OK.
C'est vrai, Ultra simple.
Merci encore.
A+.
0
Rejoignez-nous