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

rob*_*oft 37 migration installation windows-xp windows-7

我可能只是在这里非常厚,但我不清楚我应该在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文档令人困惑.:-)

blo*_*art 28

并不是的.

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

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

可以,如果你希望跟随用户有关在Active Directory环境中,如果你把它的应用程序数据\漫游(在这恰好安装软件到应用程序数据SpecialFolder.ApplicationData的位置).

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

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

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

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

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

  • 谢谢,这确实有意义,虽然它需要对应用程序代码本身进行一些更改,这是一个痛苦.该程序还有一个INI文件,我想现在需要将数据库与AppData\Local一起使用.安装到Program Files的唯一问题是(我猜)用户在安装过程中需要管理员权限,而当我们在实验期间安装到AppData\Local时,(我很确定)我们"侥幸成功" .我认为微软已经搞砸了一点 - 每用户,完全可访问的程序文件会更有意义. (2认同)
  • 记住不要使用实际路径名,请使用SpecialFolders枚举.那么你不必关心每个操作系统下的样子 (2认同)

And*_*ers 18

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

在Vista和更早版本中,没有规范的每用户应用程序文件夹,但只是使用%LOCALAPPDATA%非常常见.可悲的是,MSI只会在这些系统上使用%ProgramFiles%.


Pai*_*tan 9

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

%userprofile%\AppData\Local\Programs\Microsoft VS Code
Run Code Online (Sandbox Code Playgroud)

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


Hik*_*ari 5

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
Run Code Online (Sandbox Code Playgroud)

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

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

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

  • 公平地说,Unix中的文件系统层次结构也是完全钝的.是否应将用户数据放在/ usr/local/share中,因为它独立于架构但只安装在一台机器上?或者/ var/opt /怎么样,因为它是可选程序的可变数据?或者也许只是/ etc,因为数据无论如何都与配置有关?在一天结束时它仍然没有意义,并且更容易在二进制文件旁边的子目录中"创建自己的空间",然后解决脚本的任何权限问题.这最终在两个平台上都是正确的./咆哮 (4认同)