19 Stimmen

Gibt es eine Möglichkeit, den Umgebungspfad in C++ unter Windows programmatisch festzulegen?

Gibt es eine Möglichkeit, die globale Windows-Pfad-Umgebungsvariable programmatisch zu setzen (C++)?

Soweit ich sehen kann, setzt putenv es nur für die aktuelle Anwendung.
Direktes Ändern in der Registry (HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment) ist auch eine Option, obwohl ich API-Methoden bevorzugen würde, wenn es sie gibt?

26voto

Assaf Lavie Punkte 67504

MSDN Sagt :

Der Aufruf von SetEnvironmentVariable hat keine Auswirkungen auf die Systemumgebungs Variablen. Um programmatisch hinzuzufügen oder Systemumgebungsvariablen zu ändern, fügen Sie sie der Datei HKEY_LOCAL_MACHINE \System\CurrentControlSet\Control\Session Manager \Environment Registry-Schlüssel, dann eine WM_SETTINGCHANGE-Nachricht senden mit lParam auf die Zeichenfolge "Umgebung". Dies ermöglicht Anwendungen, wie z.B. die Shell, die Ihre Aktualisierungen aufgreifen. Beachten Sie, dass die Werte der Umgebungsvariablen auf 1024 Zeichen begrenzt sind. Zeichen begrenzt sind.

1 Stimmen

Es sollte beachtet werden, dass die Zeichenkette "Environment" im UTF16-Format vorliegt, so dass Sie Folgendes verwenden sollten L Präfix. Beispiel-Code: SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM)L"Environment", SMTO_ABORTIFHUNG, 5000, NULL);

12voto

jussij Punkte 10221

Wie bereits erwähnt, ist es notwendig, den PATH in der Maschinenebene ändern Sie einfach diesen Registrierungseintrag:

HLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

Sie können den PATH aber auch in der Datei Benutzerebene indem Sie diesen Registrierungseintrag ändern:

HKEY_CURRENT_USER\Environment\Path

Und Sie können den PATH auch in der Datei Anwendungsebene durch Hinzufügen der Anwendung \Path Details zu diesem Registrierungseintrag:

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\

3voto

Es gibt keine API, sondern nur die Möglichkeit, die Registrierung zu ändern. Der geänderte Wert wird für Prozesse verwendet, die nach der Änderung beginnen.

Auch: Beachten Sie, dass laufende Anwendungen die Meldung über geänderte Einstellungen aktiv verarbeiten müssen und viele (die meisten?) dies nicht tun.

2voto

drby Punkte 2591

Wenn Sie dies über die Registrierung tun wollen, sollten Sie sich den Quellcode von este Programm.

Microsoft bietet auch ein kleines Kommandozeilenprogramm namens setx mit seinem Ressourcen-Toolkits die Ihnen dies ermöglichen wird. Mit dem regulären Befehl set können Sie übrigens nur lokale Umgebungsvariablen definieren, glaube ich.

2voto

lakshmanaraj Punkte 4130

Ja, das ist richtig. Sie müssen auch diese Einstellungen vornehmen, ohne sich abzumelden

Senden einer Nachricht von borad casting an alle Windows SETTINGCHANGE für den Parameter (LPARAM) "Environment" mit SMTO_ABORTIFHUNG für einige Millisekunden (5000) mit SendMessageTimeout API.

Dies ist die Aufgabe von setX.exe, die mit dem Resource Kit geliefert wird.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X