2009-12-02 1 views
27

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

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

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

Моя проблема заключается только в том, что весь аспект скрытой папки AppData. Насколько я тратил MSDN, я не могу решить, где еще я должен устанавливать программы для конкретных пользователей. Взяв один из способов, похоже, что-то вроде AppData \ Local \ MyApp, и еще один способ, который, по-видимому, будет таким же действительным в соответствии с эквивалентом My Documents \ MyApp.

У кого-нибудь есть четкое руководство, где все это происходит? Я обнаружил, что документы MSDN запутывают. :-)

+1

Ха, я знаю, что вы имеете в виду. Но я был пользователем Mac уже около 4 лет, и я очень ценю, как такие вещи выполняются «там» - и я чувствую, что чем больше из нас, использующих Windows, должным образом продвигается вперед, тем больше у нас шансов сделать этот материал «просто работой» для всех в будущем. Кроме того, мы также можем быть праведно разобраны с Редмондом в следующий раз, когда они сделают радикальное произвольное изменение на что-то вроде папок приложений (Win 8, кто-нибудь?) !! – robsoft

ответ

21

Не совсем.

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

AppData, что удивительно, относится к данным приложения, а не к установке (в одностороннем порядке). Вы можете и должны все же установить в Program Files, просто не ожидайте записи в эту папку.

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

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

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

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

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

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

+1

Спасибо, это имеет смысл, хотя это потребует некоторых изменений самого кода приложения, который является болью. В программе также есть INI-файл, который, как мне кажется, теперь нужно использовать с базой данных в AppData \ Local. Единственная проблема с установкой в ​​Program Files - это (я думаю), что пользователю потребуются права администратора во время установки, тогда как когда мы устанавливали в AppData \ Local во время наших экспериментов (я уверен), мы «ушли», , Я думаю, что Microsoft немного испортила это - для пользователей, полностью доступных программных файлов, было бы больше смысла. – robsoft

+0

О, плюс, я полагаю, теперь нам также нужно подумать о том, что произойдет, если другой пользователь попытается запустить программу (через программные файлы) под своей учетной записью - приложение должно будет заметить, что у него ничего не было под AppData этого пользователя \ Локальная папка для себя и генерировать новую для каждого пользователя копию базы данных и настройки по умолчанию и т. Д. * Вздох * Все это кажется мне бесполезным! – robsoft

+1

Файл INI? Старая школа. :) И да, для программных файлов нужны права администратора для установки, что не так уж плохо, сетевые администраторы не будут любить пользователей, имеющих возможность устанавливать willy nilly :). В окнах нет официальных «Per User ", если вы не используете Click Once, что делает это, и использует данные приложения. Что касается проверки отсутствующих баз данных, вы все равно должны это делать;) – blowdart

9

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

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

-1

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

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

\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.

+2

Это не касается установки приложения для каждого пользователя, а это означает, что только пользователь может получить доступ и запустить программу. Если вы устанавливаете программные файлы, любой пользователь в операционной системе может запускать программу. Кроме того, установка в папку локальных файлов пользовательских программ не требует прав администратора. Имейте в виду, что я говорю о% LocalAppData% \ Programs, который был специально разработан для установки файлов программы. Концепция разделения приложений/данных по-прежнему применяется. – syplex

4

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 Local и Roaming (который Unix обычно обрабатывает с помощью NFS) ,

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

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

+2

Справедливости ради, иерархия файловой системы в Unix также является тупой. Должны ли данные пользователя размещаться в/usr/local/share, потому что они независимы от архитектуры, но только установлены на одной машине? Или как насчет/var/opt /, потому что это переменные данные для дополнительной программы? Или, может быть, просто/etc, поскольку данные относятся к конфигурации в любом случае? В конце концов, это все еще не имеет смысла, и проще «создать свое собственное пространство» в подкаталоге рядом с двоичным файлом, а затем разрешить любые проблемы с сценариями. Это заканчивается на обеих платформах./rant –

+0

Да, у unix есть свои проблемы. IDK, как это делается в последнее время, но много лет назад он использовался для установки всех приложений в/usr или/usr/bin или/usr/local/bin и т. Д. Хорошо иметь все двоичные файлы в одной папке и простой $ PATH , но практически невозможно вручную удалить приложение, потому что найти все его файлы непросто. Unix использовалась как серверная ОС с небольшими изменениями в приложениях с течением времени. В связи с этим текущая структура Windows проще. – Hikari

1

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