2016-05-17 5 views
0

Есть ли переменная окружения в Windows, которая указывает папку для хранения данных приложения, которая используется всеми пользователями?Различия в% ALLUSERSPROFILE% в Windows XP и Vista +

В Windows Vista и более поздних версиях это %ALLUSERSPROFILE% (обычно это карты C:/ProgramData). Однако в Windows XP %ALLUSERSPROFILE% соответствует C:\Documents and Settings\All Users, и мне все равно нужно добавить что-то вроде \Program Data\, чтобы добраться до эквивалентного места.

+0

Не совсем полезно при решении конкретной проблемы, но прагматичным решением было бы попросить ваших клиентов перейти на поддерживаемую версию ОС. – IInspectable

+0

Пожалуйста, добавьте тег языка, чтобы мы знали, на каком языке вы программируете. – Anders

+0

@Anders Вопрос не зависит от языка. Я знаю, что есть API-интерфейсы для достижения того же самого, не прибегая к экологическим vars, но я специально хотел узнать об окружающих vars. – Grodriguez

ответ

2

Я не знаю о хорошем решении для пакетных файлов, но я могу объяснить историю.

В Windows 2000/XP/2003 %ALLUSERSPROFILE% именно то, что его зовут, корень каталога для всех пользователей/общего/общего профиля. Обычно «C: \ Documents and Settings \ All Users».

В оболочке Windows есть специальная константа папки, называемая CSIDL_COMMON_APPDATA, и она обычно разрешается «C: \ Documents and Settings \ All Users \ Application Data», но, к сожалению, для этих путей в этих системах нет переменной окружения.

В Windows Vista и более поздних версиях папки с документами, музыкой и видео были перемещены из папки %ALLUSERSPROFILE% и помещены в новую папку Public («c: \ Users \ Public») и могут быть найдены с %PUBLIC%. CSIDL_COMMON_APPDATA также получил переменную среды, называемую %ProgramData%, и поскольку большинство других папок переместилось на %PUBLIC%, было решено, что %ALLUSERSPROFILE% не нуждается в подпапке Application Data, так что %ProgramData% - это то же самое, что и %ALLUSERSPROFILE%.

Если вы пишете пакетный файл:

Мое предположение, использовать %ProgramData%, если он существует, в противном случае, откат к %ALLUSERSPROFILE%\Application Data. Я не знаю, если в папке данных приложения имеет другое имя на локализованных версиях Windows ...

Если вы пишете C/C++ приложения:

Использование SHGetFolderPath.

Если вы пишете приложение .NET:

Использование Environment.SpecialFolder.

+0

У меня нет окна XP для проверки, но я думаю, что '% ALLUSERSPROFILE% \ Application Data' должен работать в любом случае. (В Vista и позже в папке ProgramData есть символическая ссылка с именем Application Data.) Однако я не уверен в локализации. –

+0

(Разумеется, * правильное * решение заключается в использовании CSIDL_COMMON_APPDATA, переменные среды - это устаревшая технология.) –

+0

@HarryJohnston Правильные переменные среды не должны использоваться в программах Windows, но вопрос не помечен языком, поэтому я предположил, это был вопрос пакетного файла, и там вы застряли с ними, если вы не хотите добавить хрупкий код чтения реестра в ваш пакетный файл. – Anders

Смежные вопросы