AppData现在是安装用户特定应用程序(修改自己的数据)的“正确”位置吗?

问题描述 投票:33回答:6

我可能只是在这里非常厚,但我不清楚我应该在Windows 7上安装“新的”用户专用程序(也可能是Vista,尽管我还没有特别关注那个场景) )。

在Windows XP(正确或错误)下,我们总是将我们的程序安装到“Program Files”下的文件夹中,并接受它们对所有人都可用。从我在Windows 7下可以收集到的内容,我应该在用户的AppData文件夹下安装我的软件(可能是AppData \ Local \ MyApp)。这是有道理的,但是这个文件夹默认是“隐藏”的事实意味着我们将通过支持的东西“有趣”地与我们的用户交谈。

我想安装我们的软件,以便它是特定于用户的(Windows 7中的用户位非常有意义),但我确实希望用户能够在需要时访问它。我们的程序还包括一个'data'子目录,它在运行时需要写入(嵌入式数据库),但由于程序是单用户/独立的,因此数据文件夹不在用户特定的文件夹中会成为一个问题。

我的问题只是AppData的整个“隐藏文件夹”方面。尽管我已经搜索过MSDN,但我无法解决我应该安装用户特定程序的问题。从某种方式来看,它看起来像AppData \ Local \ MyApp,而另一种方式似乎在用户的My Documents \ MyApp等效项下同样有效。

有没有人有一个明确的指南,所有这些东西去哪里?我发现MSDN文档令人困惑。 :-)

windows-7 windows-xp installation migration
6个回答
28
投票

并不是的。

该目录充当当前漫游用户的特定于应用程序的数据的公共存储库。

令人惊讶的是,AppData对于应用程序数据而非安装(除了Click Once / Silverlight应用程序)。您可以,并且仍应安装到Program Files中,只是不要期望写入该文件夹。

如果您希望在Active Directory环境中跟踪用户,则可以将软件安装到AppData中,如果将其放在AppData \ Roaming(SpecialFolder.ApplicationData位置)中,则会发生这种情况。

如果您希望软件仅供安装它的用户使用,您也可以安装到AppData中。例如,如果您在同一台计算机上有多个用户,并且希望完全隔离地运行不同版本的软件,则此功能非常有用。

如果您希望设置仅应用于本地计算机,那么您使用AppData \ Local,这是SpecialFolders.LocalApplicationData - 这将使AD管理员非常高兴,因为漫游配置文件大小不会突然跳升50Mb或任何软件大小。

如果您想创建适用于所有用户的设置,那么您正在查看SpecialFolders.CommonApplicationData

你应该记住永远不要依赖目录的实际名称 - 本地化问题意味着这可能会改变,并且位置确实会随着OS版本二而改变。您应该在软件中使用special folder enumeration,或者在安装程序中使用等效的FOLDERID_UserProgramFiles

您是否可以安装到Program Files中,但是使用AppData,因为它应该被使用,并将数据库存储在那里?


17
投票

Windows 7添加了%LOCALAPPDATA%\Programs已知文件夹,默认情况下会映射到ALLUSERS=2 & MSIINSTALLPERUSER=1。当%LOCALAPPDATA%时,MSI使用它。

在Vista和更早版本中,没有规范的每用户应用程序文件夹,但只使用MSI will just use是很常见的。遗憾的是/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 %ProgramFiles%在这些系统上。


5
投票

Windows 7文件夹结构深受Unix结构的启发:

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

Windows有更多的文件夹,比如My Documents for files包含用户生成的内容,AppData Local和Roaming(Unix通常用NFS处理)。

现在是我们开发人员开始使用这些结构的时候了。我们必须至少分离不需要复制的二进制文件,全局和用户设置。

当安装程序正在安装应用程序时,此设置应该具有在程序文件上写入的权限。设置完成后,Program Files只能写入其他设置,以便将二进制文件更新到其他版本。


3
投票

它是2019年,我刚刚在默认文件夹中安装了Visual Studio Code(一个Microsoft产品)

\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

这可能是为了满足管理员或UAC提示授权安装的要求


0
投票

请将可执行文件安装到Windows中的%programfiles%文件夹 - 一个简单的基于MSI的安装包可以为登录到计算机的任何新用户执行活动设置,以在其配置文件%appdata%文件夹中创建用户特定的文件和文件夹。您会看到Internet Explorer,Adobe Reader等的这种行为。这是第一次登录安装了这些应用程序的计算机时弹出的小MSI安装程序窗口。 - 谢谢 - 系统管理员:)


-4
投票

我认为,对于它的价值,用户特定的程序文件只是在寻找麻烦,这是一个该死的愚蠢的事情。

一个更明智的方法是安装不同版本的程序:

\Program Files\Your Program\ProgramLauncher.exe

然后我会在下面放置一个自举发射器:

qazxswpoi

然后,用户应用程序数据文件夹将仅包含数据,包括INI / XML / Settings文件,该文件指示此用户正在使用的程序的版本。

这种方法满足了保持数据和执行代码分离的核心租户,允许每个用户运行特定版本的代码,并通过确保不跨用户文件夹多次复制相同的可执行代码来提供少量的重复数据删除。

否则,请继续向AppData安装程序,并取消它为实现代码和数据的清晰分离所花费的时间。我发现这个帖子是因为我注意到Chromium和DropBox正在向AppData安装代码。我将卸载这些程序,并更改我的AppData文件夹上的权限以排除执行,以确保我可以轻松发现尝试相同BS的其他程序。

© www.soinside.com 2019 - 2024. All rights reserved.