【问题标题】:How to write to the common Application Data folder?如何写入公共应用程序数据文件夹?
【发布时间】:2012-05-17 10:41:36
【问题描述】:

我有一个想要为所有用户 安装的 Visual Basic 6.0 应用程序,例如,无论谁登录计算机,该设置都保存在一个位置。我有以下代码来定位公共位置:

Const ssfCOMMONAPPDATA = &H23
Dim strAllUsersPath As String

strAllUsersPath = CreateObject("Shell.Application").NameSpace(ssfCOMMONAPPDATA).Self.Path

在 Windows XP 上,此路径指向 C:\Documents and Settings\All Users\Application Data\ 文件夹。设置将设置文件复制到那里,一切都很好。 Visual Basic 6.0 应用程序可以随时更改它。

在 Windows 7 上,此路径指向 c:\ProgramData 文件夹。需要管理员权限的设置将文件复制到那里。但是,当我的 Visual Basic 6.0 应用程序启动并访问该文件时,Windows 7 会将设置文件复制到 C:\Users{USER LOGIN}\AppData\Local\VirtualStore\ 并在那里执行所有操作。因此,因为对于每个用户,Windows 7 都将设置文件复制到单独的用户目录,用户最终拥有不同的设置文件。

我是否将文件存储在错误的位置?我这样做的方式不正确吗?

【问题讨论】:

标签: windows-7 vb6 windows-xp appdata userappdatapath


【解决方案1】:

这个也咬过我。 ProgramData 文件夹具有共享读取访问权限,没有共享写入访问权限。您当然可以在安装过程中更改文件夹的权限,但我认为这与 Microsoft 的意图相反。 请参阅this other question 获取一些有用的链接

How Microsoft thinks it should be done.

【讨论】:

  • +1 Microsoft 不希望您写信给COMMONAPPDATA。这是nice VB6 article by Karl Peterson 关于存储设置的主题。还有this VB6 question
  • ProgramData 没有“共享”任何访问权限。 CommonAppData 非常好,微软推荐首选用于通用应用数据——顾名思义。问题是您的安装程序应该在那里创建应用程序的子文件夹并在其上设置适当的安全性以允许所需的访问(通常您希望用户完全控制)。默认情况下,文件和文件夹在此处创建并具有 owner 访问权限。我对卡尔的任何事情都持谨慎态度,他经常粗略地处理事情并忽略细节——但我们都不是完美的。
  • 如果您的安装程序不符合此要求,您还可以进行“首次运行”检查,然后提升并创建子文件夹结构并设置安全性。
  • 这也是 Windows 8 中的一个问题 - 今天才发现。不确定它是如何在 Windows 7 中逃避我们的?
  • 链接How Microsoft thinks it should be done.已损坏
猜你喜欢
  • 2019-02-28
  • 2014-08-14
  • 2011-08-27
  • 1970-01-01
  • 2013-04-21
  • 1970-01-01
  • 1970-01-01
  • 2022-11-15
  • 2013-08-06
相关资源
最近更新 更多