Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Environment Variablen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
13.12.2002, 16:31 Uhr
virtual
Sexiest Bit alive
(Operator)


Hi,

wie kann ich mit Hilfe des WINAPI für mein Profile Environment Settings setzen/verändern? - Ich meine jetzt nicht sowas wie setenv, das verändert das ja nur für meinen Prozess. Ich suche einen Weg, dies aus einem Programm heraus dauerhaft ins Profile zu schreiben.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
13.12.2002, 17:41 Uhr
virtual
Sexiest Bit alive
(Operator)


Hat sich erledigt:

C++:
#include "stdafx.h"
#include <windows.h>
#include <stdlib.h>

int main(int argc, char* argv[])
{
    const char* szPrgName = argv[0] + strlen(argv[0]);
    HKEY hEnvironment;

    /*
     * Check command line
     */

    while(szPrgName!=argv[0] && szPrgName[-1]!='/' && szPrgName[-1]!='\\')
        --szPrgName;

    if (argc!=3)
    {
        fprintf(stderr, "*** ERROR %s: illegal command line:\n"
                        "usage: %s key value\n", szPrgName, szPrgName);
        exit(EXIT_FAILURE);
    }

    /*
     * Get registry key to environment
     */

    if (ERROR_SUCCESS != RegCreateKeyEx(HKEY_CURRENT_USER,
                                        "Environment",
                                        NULL,
                                        NULL,
                                        REG_OPTION_NON_VOLATILE,
                                        KEY_ALL_ACCESS,
                                        NULL,
                                        &hEnvironment,
                                        NULL))
    {
        fprintf(stderr, "*** ERROR %s: RegCreateKeyEx failed!\n", szPrgName);
        exit(EXIT_FAILURE);
    }

    /*
     * Write setting to registry
     */

    if (ERROR_SUCCESS != RegSetValueEx(hEnvironment,
                                       argv[1],
                                       0,
                                       REG_SZ,
                                       (const unsigned char*)argv[2],
                                       strlen(argv[2])+1))
    {
        fprintf(stderr, "*** ERROR %s: RegSetValueEx failed!\n", szPrgName);
        exit(EXIT_FAILURE);
    }

    /*
     * Close the key
     */

    if (ERROR_SUCCESS != RegCloseKey(hEnvironment))
    {
        fprintf(stderr, "*** ERROR %s: RegCloseKey failed!\n", szPrgName);
        exit(EXIT_FAILURE);
    }

    return EXIT_SUCCESS;
}


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
05.01.2006, 15:37 Uhr
~chris123
Gast


Das verstehe ich nicht ganz!?
Das Prog schreibt zwar eine variable in die registery aber mit "set" in der konsole wird diese nicht angezeigt. Warum?
Ich bin auch schon etwas länger auf der suche nach einem ersatz für set der die Umgebungsvariablen mehr global erstellt, so dass sie auch nach dem beenden des programmes noch in einer bat datei ausgewertet werden können. Aber mit putenv, setenv und system(set...) kommt man da nicht besonders weit. Jetzt habe ich gehofft das das prog da oben funktioniert...
tut es aber nicht:-( eigentlich funktioniert es ja schon... aber ich frage mich, wiso die einträge nicht in der konsole per set sichtbar sind??? Ich werde noch wahnsenig... das muss doch irgendwie möglich sein...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
09.01.2006, 19:32 Uhr
~Environment
Gast



Zitat von ~chris123:

Das verstehe ich nicht ganz!?
Das Prog schreibt zwar eine variable in die registery aber mit "set" in der konsole wird diese nicht angezeigt. Warum?
Ich bin auch schon etwas länger auf der suche nach einem ersatz für set der die Umgebungsvariablen mehr global erstellt, so dass sie auch nach dem beenden des programmes noch in einer bat datei ausgewertet werden können. Aber mit putenv, setenv und system(set...) kommt man da nicht besonders weit. Jetzt habe ich gehofft das das prog da oben funktioniert...
tut es aber nicht:-( eigentlich funktioniert es ja schon... aber ich frage mich, wiso die einträge nicht in der konsole per set sichtbar sind??? Ich werde noch wahnsenig... das muss doch irgendwie möglich sein...



Prozesse erhalten ihr Environment beim Start. Wenn du also in der Console mit dem Progamm eine Variable setzt, interessiert das *diese* Console wenig - der Prozess läuft ja schon. In einer neu geöffneten Console sollte die Variable mit "set" angezeigt werden. Oder?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
09.01.2006, 21:55 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Naja wenn man oben bei virtual noch ein setenv dazumacht, dann gilts sogar immerhin schon für den aktuellen Prozess :-)

Ansonsten würde ich evtl erst schauen ob die Var schon existiert, wenn ja, dan nden Pfad anhängen und reinschreiben, sonst haut man ja den "alten" Wert raus. (z.b bei der PATH-Var)
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
10.01.2006, 07:17 Uhr
Tommix



'Morgen,
das, was virtual da gezaubert hat, funzelt nur unter NT/2K/XP. Unter Windows 9x wird man wohl auf die gute alte MS-DOS-mäßige ein "set" in die autoexec.bat schreiben müssen und dann neu starten...

- Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: