Programm arbeitet nicht korrekt unter Win7

CodeFatal

Erfahrenes Mitglied
Hallo zusammen,

ich habe unter XP eine Software geschrieben, welche bei Programmstart Daten aus einer Datei liest, welche im Programm Pfad liegt.
Soweit so gut.

Das Programm t auch unter Win7 nur leider kann ich die Datei nach anlegen nicht mehr aus der Software heraus speichern.
Ich hab jetzt schon einiges gegoogelt aber leider noch nicht den richtigen Weg gefunden.

Bekannt:
- Durch das RechteSystem kann ich nicht mehr direkt speichern (Admin Start ist nicht nötig/gewollt).
- Statt im Programm-Ordner landet die Datei im VirtualStore unter appData\Local\Virtualstore\Programm Pfad.

Was ich jetzt Suche ist ein Vorgehen, bei dem ich die Datei im "AppData\Roaming\Meine Programme\Mein Programm" bewust speichere.
1) Wie erstelle ich den Pfad - mkdir kenn ich.
2) Wie greife ich auf den Pfad richtig zu
3) Wie muss ich das für "Alle Nutzer" machen?
4) Läuft die Software dann noch unter XP oder muss ich da im Quellcode anfangen die Windowsversionen unterschiedlich zu behandeln?

Ich danke für eure Hilfe.

Gruß
Michael
 
Hier der Codeschnipsel:
Code:
char *windir;
windir=getenv("windir");
if(windir==NULL) { printf("Fehler\n"); exit(0); }
windir=realloc(windir,(strlen(windir)+strlen("Temp\\DeinProgramm\\DeineDatei.txt")+2)*sizeof(char));
if(windir==NULL) { printf("Fehler\n"); exit(0); }
strcat(windir,"Temp\\DeinProgramm\\DeineDatei.txt");
Das hier könnte gehen, speichert die Datei im Windows-Temp ab.
Ich weiss nicht, ob das auch schreibgeschützt ist, aber ein Test ist's allemal wert ;)
lorenz
 
Oder machs gleich richtig.

Code:
LPTSTR pszPath = new TCHAR[MAX_PATH];
if( SHGetFolderPath( 0, CSIDL_COMMON_APPDATA, 0, SHGFP_TYPE_CURRENT, pszPath ) == S_OK )
{
// pfad wurde erfolgreich ausgelesen
}

if( SHGetFolderPath( 0, CSIDL_LOCAL_APPDATA, 0, SHGFP_TYPE_CURRENT, pszPath ) == S_OK )
{
// pfad wurde erfolgreich ausgelesen}

Das läuft auch unter XP. Genaugenommen war es schon unter Xp unerwünscht direkt in den Programme-Folder zu schreiben. Vorgabe war schon damals das dafür vorgesehen Verzeichnis zu benutzen, hat sich nur keiner dran gehalten. Unter Vista/Win7 wurde das dann erstmals enforced.
 
Zurück