2016-05-17 28 views
0

Gibt es eine Umgebungsvariable in Windows, die den Ordner angibt, um Anwendungsdaten zu speichern, die von allen Benutzern gemeinsam genutzt werden?Unterschiede in% ALLUSERSPROFILE% in Windows XP und Vista +

In Windows Vista und höher ist dies %ALLUSERSPROFILE% (wird normalerweise auf C:/ProgramData abgebildet). Allerdings in Windows XP, %ALLUSERSPROFILE% Karten zu C:\Documents and Settings\All Users und ich würde noch etwas wie \Program Data\ hinzufügen müssen, um an die entsprechende Stelle zu gelangen.

+0

Nicht ganz hilfreich bei der Lösung Ihres speziellen Problems, aber die pragmatische Lösung wäre, Ihre Kunden zu bitten, auf eine unterstützte Version des Betriebssystems zu aktualisieren. – IInspectable

+0

Bitte fügen Sie ein Sprach-Tag hinzu, damit wir wissen, in welcher Sprache Sie programmieren. – Anders

+0

@Anders Die Frage ist nicht sprachspezifisch. Ich bin mir bewusst, dass es APIs gibt, um das gleiche zu erreichen, ohne auf Umgebungsvars zurückgreifen zu müssen, aber ich wollte speziell über die Umgebung vars wissen. – Grodriguez

Antwort

2

Ich kenne keine gute Lösung für Batch-Dateien, aber ich kann die Geschichte erklären.

Unter Windows 2000/XP/2003 ist %ALLUSERSPROFILE% genau der Name des Stammverzeichnisses des Verzeichnisses all-users/shared/common. In der Regel "C: \ Dokumente und Einstellungen \ Alle Benutzer". Die Windows-Shell hat eine spezielle Ordnerkonstante mit dem Namen CSIDL_COMMON_APPDATA, die normalerweise in "C: \ Dokumente und Einstellungen \ All Users \ Anwendungsdaten" aufgelöst wird, aber auf diesen Systemen ist leider keine Umgebungsvariable für diesen Pfad definiert.

In Windows Vista und höher wurden die Ordner für Dokumente, Musik und Video aus dem Ordner %ALLUSERSPROFILE% entfernt und in einen neuen Ordner mit dem Namen Public ("c: \ Users \ Public") verschoben und können unter %PUBLIC% gefunden werden. CSIDL_COMMON_APPDATA hat auch eine Umgebungsvariable namens %ProgramData%, und da die meisten anderen Ordner nach %PUBLIC% verschoben wurden, wurde entschieden, dass %ALLUSERSPROFILE% den Unterordner Anwendungsdaten nicht benötigte, so dass %ProgramData% dasselbe ist wie %ALLUSERSPROFILE%.

Wenn Sie schreiben, eine Batch-Datei:

Mein Vorschlag ist, verwenden %ProgramData% wenn es vorhanden ist, andernfalls zurückgreifen zu %ALLUSERSPROFILE%\Application Data. Ich weiß nicht, ob die Anwendungsdaten-Ordner einen anderen Namen auf lokalisierten Versionen von Windows hat ...

Wenn Sie eine C/C++ Anwendung schreiben:

Verwendung SHGetFolderPath.

Wenn Sie eine .NET-Anwendung schreiben:

Verwendung Environment.SpecialFolder.

+0

Ich habe keine XP-Box, gegen die ich überprüfen kann, aber ich denke '% ALLUSERSPROFILE% \ Application Data' sollte in jedem Fall funktionieren. (Unter Vista und später gibt es einen Symlink namens Anwendungsdaten im Ordner ProgramData.) Ich bin mir jedoch nicht sicher über die Lokalisierung. –

+0

(Natürlich ist die * korrekte * Lösung, 'CSIDL_COMMON_APPDATA' zu verwenden, Umgebungsvariablen sind eine Legacy-Technologie.) –

+0

@HarryJohnston Korrekt, Umgebungsvariablen sollten nicht in Windows-Programmen verwendet werden, aber die Frage ist nicht mit einer Sprache getaggt Das war eine Batch-Datei-Frage und da sind Sie mit ihnen stecken, es sei denn, Sie möchten einige fragile Registrierung lesen Code in Ihre Batch-Datei. – Anders