Является ли AppData «правильным» местом для установки пользовательских приложений (которые изменяют свои собственные данные)? - PullRequest
34 голосов
/ 02 декабря 2009

Я, вероятно, просто очень толстый здесь, но мне не ясно, где я должен устанавливать «новые» пользовательские программы на Windows 7 ( и, вероятно, Vista тоже, хотя я не специально посмотрел на этот сценарий еще ).

В Windows XP (правильно или неправильно) мы всегда устанавливали наши программы в папки в « Program Files » и соглашались, что они будут доступны каждому. Из того, что я могу собрать под Windows 7, я должен установить свое программное обеспечение в папке пользователя AppData (возможно, AppData \ Local \ MyApp ). Это имеет определенный смысл, но тот факт, что эта папка по умолчанию «скрыта», означает, что мы собираемся «весело» пообщаться с нашими пользователями через службу поддержки.

Я хочу установить наше программное обеспечение так, чтобы оно зависело от пользователя (бит «Пользователи» в Windows 7 имеет смысл), но я хочу, чтобы пользователь мог получить к нему доступ при необходимости. Наша программа также включает в себя подкаталог «data», в который нужно записывать данные во время работы (встроенная база данных), но поскольку программа предназначена для однопользовательского / автономного доступа, папка данных, находящаяся внутри пользовательской папки, не будет проблема.

Моя проблема только в том аспекте AppData, который связан со скрытой папкой. Как бы я ни занимался MSDN, я не могу понять, где еще я должен устанавливать пользовательские программы. С одной стороны, это может выглядеть как AppData \ Local \ MyApp , а с другой стороны, это может показаться таким же допустимым для Мои документы \ MyApp пользователя.

Кто-нибудь получил четкое руководство о том, куда все это идет? Документы MSDN показались мне запутанными. : -)

Ответы [ 6 ]

27 голосов
/ 04 декабря 2009

Не совсем.

Каталог, который служит общим хранилище для конкретного приложения данные для текущего роумингового пользователя.

Удивительно, но AppData предназначена для данных приложения, а не для установки (щелкните «Один раз» / «Приложения Silverlight в стороне»). Вы можете и должны устанавливать в Program Files, но не ожидайте записи в эту папку.

Вы можете установить программное обеспечение в AppData, если вы хотите, чтобы оно следовало за пользователем в среде Active Directory, что происходит, если вы помещаете его в AppData \ Roaming (местоположение SpecialFolder.ApplicationData).

Вы также можете установить в AppData, если хотите, чтобы программное обеспечение было доступно только пользователю, который его устанавливает. Это может быть полезно, если, например, у вас есть несколько пользователей на одном компьютере, которые хотят запускать разные версии программного обеспечения в полной изоляции.

Если вы хотите, чтобы настройки применялись только на локальном компьютере, используйте AppData \ Local, что равно SpecialFolders.LocalApplicationData - это очень обрадует администраторов AD, так как размер перемещаемого профиля не увеличится внезапно до 50 Мб или любого другого размера вашего программного обеспечения.

Если вы хотите создать настройки, которые применяются ко всем пользователям, тогда вы смотрите SpecialFolders.CommonApplicationData

Вы должны помнить, что никогда не следует полагаться на фактическое имя каталога - проблемы с локализацией означают, что это может измениться, и местоположение действительно изменится во второй версии ОС. Вы должны использовать специальное перечисление папок в своем программном обеспечении или эквивалент в вашем установщике.

Не могли бы вы установить в Program Files, но использовать AppData, как предполагается, и хранить там свою базу данных?

16 голосов
/ 04 декабря 2009

Windows 7 добавила FOLDERID_UserProgramFiles известную папку, и по умолчанию она отображается на %LOCALAPPDATA%\Programs. Это используется MSI, когда ALLUSERS = 2 & MSIINSTALLPERUSER = 1 .

В Vista и более ранних версиях нет канонической папки для приложений пользователя, а просто использование %LOCALAPPDATA% довольно распространено. К сожалению, MSI будет использовать % ProgramFiles% на этих системах.

5 голосов
/ 07 мая 2016

Структура папок Windows 7 глубоко вдохновлена ​​структурой Unix:

/usr/ -> C:\Program Files\ -> binaries: executables and dynamically linked
/etc/ -> C:\ProgramData\ -> global settings
/home/ -> C:\Users\ -> a folder for each user
~/.* -> C:\Users\Hikari\AppData\Roaming\ -> settings for each user

В Windows есть больше папок, таких как «Мои документы» для файлов с содержимым, созданным пользователем, «Локальные данные AppData» и «Роуминг» (который Unix обычно обрабатывает с NFS).

Пора нам, разработчикам, начать использовать эти структуры. Мы должны отделить как минимум двоичные файлы, которые не нужно реплицировать, глобальные и пользовательские настройки.

Когда установка устанавливает приложение, она должна иметь разрешение на запись в Program Files. После завершения установки файлы программ должны быть доступны для записи только для других установок, нацеленных на обновление двоичных файлов до других версий.

2 голосов
/ 13 февраля 2019

Это 2019 год, и я только что установил Visual Studio Code (продукт Microsoft) в папку по умолчанию

%userprofile%\AppData\Local\Programs\Microsoft VS Code

Это, вероятно, для того, чтобы обойти требование, чтобы администратор или UAC запросили разрешение на установку

0 голосов
/ 19 января 2017

Пожалуйста, установите исполняемые файлы в папку% programfiles% в Windows - простой установочный пакет на основе MSI может выполнить активную настройку для любого нового пользователя, который входит в систему на компьютере, для создания пользовательских файлов и папок в их профилях% appdata% папка. Вы видите такое поведение для Internet Explorer, Adobe Reader и т. Д. - Это маленькое окно установщика MSI, которое появляется при первом входе в систему на компьютере, на котором установлены эти приложения. - Спасибо - системный администратор:)

0 голосов
/ 04 апреля 2015

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

Гораздо более разумный подход заключается в установке различных версий вашей программы на:

\Program Files\Your Program\Program_v0.1\Program.exe
\Program Files\Your Program\Program_v0.2\Program.exe
\Program Files\Your Program\Program_v0.3\Program.exe
\Program Files\Your Program\Program_v0.4\Program.exe

Я бы тогда разместил загрузочную пусковую установку по адресу:

\Program Files\Your Program\ProgramLauncher.exe

Тогда папка данных пользовательского приложения будет содержать только данные , включая файл INI / XML / Settings, в котором указывается версия программы, с которой работает этот пользователь.

Такой подход удовлетворяет основной принцип хранения данных и выполнения кода отдельно, позволяет каждому пользователю запускать определенную версию кода и предлагает небольшое количество дедупликации, гарантируя, что один и тот же исполняемый код не будет скопирован несколько раз через пользовательские папки.

В противном случае продолжайте установку программ в AppData и отмените годы, которые потребовались нам для достижения четкого разделения кода и данных. Я нашел эту ветку, потому что заметил, что Chromium и DropBox устанавливают код в AppData. Я собираюсь удалить эти программы и изменить разрешения в моей папке AppData, чтобы исключить их выполнение, чтобы можно было легко обнаружить другие программы, пытающиеся использовать ту же BS.

...