Gibt es eine Möglichkeit, die globale Windows-Pfadumgebungsvariable programmgesteuert (C++) festzulegen?
Soweit ich sehen kann, setzt putenv es nur für die aktuelle Anwendung.
Ändern direkt in der Registrierung (HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment)
ist auch eine Option, obwohl ich API-Methoden bevorzugen würde, wenn es gibt?Gibt es eine Möglichkeit, den Umgebungspfad programmgesteuert in C++ unter Windows festzulegen?
Antwort
MSDN Says:
SetEnvironmentVariable Aufruf hat keine Auswirkungen auf die Systemumgebung Variablen. Um programmatisch hinzufügen oder Systemumgebungsvariablen ändern, sie das HKEY_LOCAL_MACHINE \ System hinzufügen \ CurrentControlSet \ Control \ Session Manager \ Environment Registrierungsschlüssel, dann Broadcast eine WM_SETTINGCHANGE Nachricht mit lParam auf den String gesetzt "Umwelt" . Dies ermöglicht Anwendungen, wie die Shell, nehmen Sie Ihre Updates. Beachten Sie, dass die Werte der Umgebungsvariablen , die in diesem Schlüssel aufgeführt sind, auf 1024 Zeichen beschränkt sind.
Es gibt keine API - das Ändern der Registrierung ist der Weg, dies zu tun. Der geänderte Wert wird für Prozesse verwendet, die nach der Änderung beginnen.
Auch: Beachten Sie, dass laufende Anwendungen aktiv die Einstellungen geändert Nachricht verarbeiten müssen und viele (die meisten?) Tun dies nicht.
Wenn Sie es über die Registrierung tun möchten, möchten Sie vielleicht den Quellcode von this Programm anzeigen.
Microsoft bietet auch ein kleines Befehlszeilenprogramm namens setx mit seiner resource toolkits, mit dem Sie dies tun können. Übrigens können Sie mit dem regulären Befehl nur lokale Umgebungsvariablen definieren.
Ja Sie haben Recht. Sie müssen auch diese Einstellungen bewirken, ohne
Nachricht von borad an alle Fenster SETTINGCHANGE für einige Millisekunden für den Parameter (LPARAM) „Umwelt“ mit SMTO_ABORTIFHUNG Abwerfen Logging (5000) Sendmessagetimeout-API.
Dies ist, was SetX.exe mit Resource Kit zur Verfügung stellt.
Wie bereits erwähnt, die PATH an der Maschine Ebene zu ändern, nur diesen Registrierungseintrag ändern:
HLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
Sie können aber auch den Weg auf der Benutzerebene durch Änderung dieser Registrierung festgelegt Eintritt:
HKEY_CURRENT_USER\Environment\Path
Und Sie können auch den Pfad an der Anwendungsebene durch Hinzufügen der Anwendung \ Path deta gesetzt its zu diesem Registrierungseintrag:
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\
- 1. Gibt es eine Möglichkeit, den Anwendungsnamen in Elmah programmgesteuert festzulegen?
- 2. Gibt es eine Möglichkeit, den Titel in showFeedDialog festzulegen?
- 3. Gibt es eine Möglichkeit, den aktuellen Knoten eines SiteMapPath-Steuerelements programmgesteuert festzulegen?
- 4. Gibt es eine Möglichkeit, den Namen einer Sytem.Threading.Task festzulegen?
- 5. Gibt es eine Möglichkeit, Tabulatorreihenfolge in ASP.net festzulegen?
- 6. Gibt es eine Möglichkeit, automatische Eigenschaften in sekundären Konstruktoren festzulegen?
- 7. Gibt es eine Möglichkeit, HttpExpires für ein Unterverzeichnis eines virtuellen Verzeichnisses programmgesteuert auf IIS 6 festzulegen?
- 8. Gibt es eine Möglichkeit, einen separaten Kurztitel für UITabBar festzulegen?
- 9. Gibt es eine Möglichkeit, Windows-Dateisystem-Verknüpfungen programmgesteuert in C# ohne COM zu folgen?
- 10. WebClient.AsyncDownloadString() - Gibt es eine Möglichkeit, ein Timeout festzulegen?
- 11. Gibt es eine Möglichkeit, das erforderliche Attribut für text_field_tag festzulegen?
- 12. Angular2 gibt es eine Möglichkeit, Bootstrap col dynamisch festzulegen?
- 13. Gibt es eine Möglichkeit, eine Ausführungsberechtigung für aufrufende Anwendungen für eine C# -Bibliothek festzulegen?
- 14. Gibt es eine Möglichkeit, eine NSCollectionView in Swift programmgesteuert einzurichten?
- 15. Gibt es eine Möglichkeit, eine Eigenschaft nur einmal in C#
- 16. Gibt es eine Möglichkeit, den Wert von $ festzulegen? in einem Schein in Ruby?
- 17. Gibt es eine Möglichkeit, eine Präprozessorvariable auf den Wert einer Eigenschaft festzulegen?
- 18. Gibt es eine Möglichkeit, die Bearbeitung eines Textfelds programmgesteuert abzubrechen?
- 19. Gibt es eine schnellere Möglichkeit, den ausgewählten Wert in einem Dropdown-Menü festzulegen?
- 20. Gibt es eine Möglichkeit, den Tastaturtyp festzulegen, wenn ein Wert in einem StringGrid eingegeben wird?
- 21. Gibt es eine Möglichkeit, AT-COMMAND programmgesteuert in Android auszuführen?
- 22. Gibt es eine Möglichkeit programmgesteuert Python-Bytecode zu generieren?
- 23. Gibt es keine einfache Möglichkeit, WPF-StatusBar-Text festzulegen?
- 24. Gibt es eine Möglichkeit, das Statusleistenelement programmgesteuert hervorzuheben?
- 25. Gibt es eine Möglichkeit, den Ordner mit Passwort zu schützen?
- 26. Gibt es eine Möglichkeit, eine öffentliche (elastische) IP für eine Maschine in AWS festzulegen?
- 27. Gibt es eine Möglichkeit, den * tatsächlichen * Sitzungsspeicherpfad zu bestimmen?
- 28. Gibt es eine Möglichkeit, ein Haskell-Setup unter Windows ohne eine Installation zu erhalten? (Kopieren + Einfügen)
- 29. Gibt es eine Möglichkeit, programmgesteuert erweitern Apples Expose
- 30. Gibt es eine Möglichkeit, ein Fenster programmgesteuert zu minimieren
Es sollte beachtet werden, dass "Environment" Zeichenfolge in UTF16-Form ist, so sollten Sie 'L' Präfix verwenden. Beispielcode: 'SendMessageTimeout (HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM) L" Umgebung ", SMTO_ABORTIFHUNG, 5000, NULL);' – izogfif