Windows 7 如何写入公用应用程序数据文件夹?

Windows 7 如何写入公用应用程序数据文件夹?,windows-7,vb6,windows-xp,appdata,userappdatapath,Windows 7,Vb6,Windows Xp,Appdata,Userappdatapath,我有一个Visual Basic 6.0应用程序,我希望为所有用户安装该应用程序,例如,无论谁登录到计算机,该设置都保存在一个位置。我有以下代码来定位公共位置: Const ssfCOMMONAPPDATA = &H23 Dim strAllUsersPath As String strAllUsersPath = CreateObject("Shell.Application").NameSpace(ssfCOMMONAPPDATA).Self.Path 在Windows XP上,

我有一个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都会将设置文件复制到单独的用户目录中,因此用户最终会拥有不同的设置文件


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

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


这可能会引起您的兴趣+1 Microsoft不希望您写入
COMMONAPPDATA
。这里有一个关于在何处存储设置的示例。而@MarkJ这篇文章确实说得很好。我在我的VB6应用程序中使用他的CSystemFolders类已有一年多了,没有任何hickups(2500个用户)程序数据没有“共享”任何访问权限。CommonAppData非常好,微软推荐并首选CommonAppData,正如其名字所示。问题是,安装程序应该在那里创建应用程序的子文件夹,并在其上设置适当的安全性以允许所需的访问(通常您希望完全控制用户)。默认情况下,文件和文件夹是通过所有者访问权限在那里创建的。我对Karl说的任何事情都会很谨慎,他经常粗枝大叶,忽略细节——但我们都不是十全十美的。你也可以先进行“首次运行”检查,然后提升并创建子文件夹结构,如果你的安装程序达不到这一点,还可以设置安全性。这也是Windows 8中的一个问题——今天才发现。不知道它是如何在Windows7中避开我们的?