Windows 7 AppData现在是';正确的';安装特定于用户的应用程序(可修改其自身数据)的位置?

Windows 7 AppData现在是';正确的';安装特定于用户的应用程序(可修改其自身数据)的位置?,windows-7,windows-xp,installation,migration,Windows 7,Windows Xp,Installation,Migration,我可能只是在这里说得太多了,但我不清楚我应该在Windows 7上安装“新的”特定于用户的程序(可能还有Vista,尽管我还没有专门研究过这种情况) 在Windows XP下(正确或错误),我们总是将程序安装到“程序文件”下的文件夹中,并接受每个人都可以使用这些程序。根据我在Windows7下收集到的信息,我应该在用户的AppData文件夹(可能是AppData\Local\MyApp)下安装我的软件。这在一定程度上是有道理的,但这个文件夹在默认情况下是“隐藏”的,这意味着我们将通过支持内容与用

我可能只是在这里说得太多了,但我不清楚我应该在Windows 7上安装“新的”特定于用户的程序(可能还有Vista,尽管我还没有专门研究过这种情况)

在Windows XP下(正确或错误),我们总是将程序安装到“程序文件”下的文件夹中,并接受每个人都可以使用这些程序。根据我在Windows7下收集到的信息,我应该在用户的AppData文件夹(可能是AppData\Local\MyApp)下安装我的软件。这在一定程度上是有道理的,但这个文件夹在默认情况下是“隐藏”的,这意味着我们将通过支持内容与用户进行“有趣”的交谈

我想安装我们的软件,使它的用户特定的(用户位在Windows7的完美意义),但我希望用户能够访问它,如果需要的话。我们的程序还包括一个“数据”子目录,它需要在运行时写入该子目录(嵌入式数据库),但由于该程序旨在成为单用户/独立程序,因此数据文件夹位于用户特定文件夹内不会有问题

我的问题只是AppData的整个“隐藏文件夹”方面。虽然我已经浏览了MSDN,但我不知道应该在哪里安装特定于用户的程序。一方面,它看起来像AppData\Local\MyApp,另一方面,它在用户的My Documents\MyApp等效项下似乎同样有效

有没有人对这些东西的去向有明确的指导?我发现MSDN文档令人困惑。:-)

Windows 7添加了已知文件夹,默认情况下,该文件夹映射到
%LOCALAPPDATA%\Programs
。这是由MSI使用时

在Vista和早期版本中,没有规范的每个用户应用程序文件夹,但只使用
%LOCALAPPDATA%
是非常常见的。遗憾的是,这些系统上有%ProgramFiles%。

不太可能

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

令人惊讶的是,AppData用于应用程序数据,而不用于安装(单击一下/Silverlight应用程序)。您可以,而且应该仍然安装到程序文件中,只是不要期望写入该文件夹

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

如果希望软件仅对安装它的用户可用,也可以安装到AppData中。例如,如果您在同一台计算机上有多个用户,他们都希望完全隔离地运行不同版本的软件,那么这将非常有用

如果您希望设置仅应用于本地计算机,则可以使用AppData\local,它是
SpecialFolders.LocalApplicationData
——这将使广告管理员非常高兴,因为漫游配置文件大小不会突然跳升到50Mb或任何软件大小

如果您想创建适用于所有用户的设置,则需要查看
SpecialFolders.CommonApplicationData

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


你能不能不安装到程序文件中,而是按预期使用AppData,并将数据库存储在其中?

我的观点,值得一提的是,特定于用户的程序文件只是自找麻烦,这是一件非常愚蠢的事

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

\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的程序。

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处理)生成的内容的文件

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


当安装程序安装应用程序时,此安装程序应具有在程序文件上写入的权限。安装完成后,程序文件应仅可写入其他旨在将二进制文件更新为其他版本的设置。

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

现在是2019年,我想
%userprofile%\AppData\Local\Programs\Microsoft VS Code