How to write to the common Application Data folder?
Asked Answered
V

1

4

I have a Visual Basic 6.0 application that I want to install for All Users, for example, the setting are held in a single spot regardless who logs into the computer. I have the following code to locate the common location:

Const ssfCOMMONAPPDATA = &H23
Dim strAllUsersPath As String

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

On Windows XP, this path points to C:\Documents and Settings\All Users\Application Data\ folder. The setup copies the settings file there and everything is great. The Visual Basic 6.0 app can change it at any time.

On Windows 7, this path points to c:\ProgramData folder. The setup, which requires administrator privileges, copies the file there. However, when my Visual Basic 6.0 application starts and accesses the file, Windows 7 copies the settings file to a C:\Users{USER LOGIN}\AppData\Local\VirtualStore\ and performs all the operations on it there. As a result, because for each user, Windows 7 copies the settings file to a separate user directory, the users end up having a different settings file.

Am I storing the file in the wrong location? Am I doing it in the incorrect manner?

Vivia answered 8/5, 2012 at 22:5 Comment(1)
A question and two answers that could be of interestAtli
A
10

This one has bitten me too. The ProgramData folder has shared Read Access, no shared write access. You can of course change the permission on the folder during install, but I think that goes contrary to how Microsoft meant it to be. See this other question for some useful links

How Microsoft thinks it should be done.

Avina answered 8/5, 2012 at 22:23 Comment(8)
+1 Microsoft don't want you to write to COMMONAPPDATA. Here's a nice VB6 article by Karl Peterson on the subject of where to store settings. And this VB6 questionCelka
@Celka This article says it all very well indeed. I am using his CSystemFolders class in my VB6 app for more than a year now without any hickups (2500 users)Avina
ProgramData doesn't have "shared" anything access. CommonAppData is perfectly fine and is recommended and preferred by Microsoft for, well, common app data - as the name suggests. The snag is your installer should create the app's subfolder there and set appropriate security on it to permit required access (often you want Full Control for Users). By default files and folders are created there with owner access. I'd be cautious about anything from Karl, he often broad-brushes things and misses the fine points - but none of us is perfect.Nutria
You can also do a "first run" check then elevate and create the subfolder structure and set security if your installer isn't up to this.Nutria
This is a problem in Windows 8 as well - just uncovered it today. Not sure how it ever evaded us in Windows 7?Santossantosdumont
The permissions on the ProgramData folder are not read-only. Any user can create a file or directory, without elevating.Culler
The link How Microsoft thinks it should be done. is brokenShermy
The link was for a download page for a PDF and XPS, which luckily have been successfully captured on web.archive.org.Detonation

© 2022 - 2024 — McMap. All rights reserved.