@
ryh #3 @
roshad #4
你们提到的是 WinRT API,这是完全不同的模型。WinRT roaming app data 是存在于 Isolated Storage 里面的 RoamingState 和 Settings 里面的,每个 app 的 isolated storage 在目前的情况下默认位置是 %LOCALAPPDATA%\Packages\<Package Family Name> 下。
@
ggsimidar #5 他们说的和 %APPDATA% 漫游无关。
@
sobigfish #8 我个人的看法是不会。
Roaming user profile 是 Windows domain 的功能,工作原理就是登录的时候从服务器 copy user profile 里面可以 roam 的部分( user profile 通常是 %USERPROFILE%,但是并不是每个内容都可以 roam ),注销的时候把可以 roam 的部分复制到 domain controller。这在很慢的网络环境下是不可能的(例如离开了通过 Ethernet 连入公司网络的情况),此外,应该避免用户同时登录 forest 里面的多台电脑。
我曾经在 Microsoft 有账户,但我没有观察这些数据是否 roam 过。这个功能的使用频率在逐渐降低。更多阅读材料请见
https://blogs.msdn.microsoft.com/oldnewthing/20050630-20/?p=35143/@
szzhiyang 回到楼主的问题,如果你不是为了企业开发软件,你的 app data 基本上不可能 roam。从逻辑上来说,你应该如此选择存放的位置:%APPDATA% 存和机器无关的数据,且不能太大。%LOCALAPPDATA% 存和机器有关的数据、从云同步的数据、大的数据以及任何删除都没有实际损失的数据。
举个例子,Outlook 把用户的 mail signature 存在 %APPDATA%\Microsoft\Signatures 里,但是用户邮箱的缓存数据存在 %LOCALAPPDATA%\Microsoft\Outlook 里面。前者是因为 mail signature 没有一个统一的云服务,如果用户刚好在启用了 roaming profiles 的 domain 里,则用户可以享受在公司里换电脑之后不需要重新设置签名档的好处。后者是因为,首先邮箱数据的缓存可能很大,其次,邮箱的缓存是一个删除了也没有损失的内容(可以重新从服务器下载),最后,邮箱缓存是从邮件服务器(例如 Exchange Server )来的,逻辑上就不需要用 roaming profile 同步。
最后:不要用 APPDATA 和 LOCALAPPDATA 去访问这两个文件夹。使用 SHGetKnownFolderPath (.NET 的 System.Environment.GetFolderPath )。
@
Vhc #10
%AppData% = 用户的漫游数据
%UserProfile% = 用户配置文件夹,现在通常是 C:\Users\用户名,默认情况下用户的 known folders 是这个文件夹的子文件夹,但是用户可以修改
%AllUsersProfile% = 所有用户的配置文件夹,注意这不是公用文件夹,修改需要管理员权限,但是创建新文件和修改自己创建的文件不需要(每个用户自动有自己创建的文件夹、文件的全部控制权)
%ProgramFiles% = 整机软件应该默认被安装到的位置,如果你运行在 WoW 64 上,则自动变成 (x86) 版本,如果你是 x64/x86 系统的 x64/x86 进程,则通常是 C:\Program Files
%SystemRoot% = 系统的目录,通常是 C:\Windows
%SystemDrive% = 系统所在的驱动器字母,通常是 C:
%Temp% = %Tmp% = 当前会话(注销之前)的临时文件夹,注意,同一个用户多次登录系统,每次可能有不同的临时文件夹(该情况多见于 Windows Server )
我觉得这几个东西就没有什么相像的地方。为什么 TEMP 和 TMP 都有呢?兼容性。
https://blogs.msdn.microsoft.com/oldnewthing/20150417-00/?p=44213/此外,能使用 API 就不要用环境变量。因为使用环境变量有可能被启动你的进程骗(这可以是好事也可以是坏事)。