2012-05-08 4 views
4

У меня есть приложение 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 копирует файл настроек в отдельный каталог пользователя, у пользователей появляется другой файл настроек.

Я храню файл в неправильном месте? Я делаю это неправильно?

+0

[Вопрос и два ответа] (http://stackoverflow.com/questions/3219255/why-do-files-get-placed-c-users-usernameappdata -local-virtualstore-program-fi), которые могут быть интересны – Steve

ответ

9

Этот меня тоже укусил. Папка ProgramData имеет общий доступ для чтения, без доступа к общей записи. Вы можете, конечно, изменить разрешение на папку во время установки, но я думаю, что это противоречит тому, как Microsoft это понимала. См this other question за полезные ссылки

How Microsoft thinks it should be done.

+0

+1 Microsoft не хочет, чтобы вы писали в 'COMMONAPPDATA'. Вот [хорошая статья VB6 от Karl Peterson] (http://vb.mvps.org/articles/vsm20090119.pdf) о том, где хранить настройки. И [этот вопрос VB6] (http://stackoverflow.com/questions/3054802/commonappdata-in-vb6) – MarkJ

+0

@MarkJ В этой статье все сказано очень хорошо. Я использую его класс CSystemFolders в своем приложении VB6 уже более года без каких-либо hickups (2500 пользователей) – Dabblernl

+4

У ProgramData нет доступа «общего доступа». CommonAppData отлично подходит и * рекомендуется * и * предпочитается * Microsoft для, ну, общих данных приложения - как следует из названия. Ловушка - ваш установщик должен создать там подпапку приложения и установить для нее соответствующую безопасность, чтобы разрешить необходимый доступ (часто вам нужен полный доступ для пользователей). По умолчанию файлы и папки создаются там с * владельцем * доступом. Я бы с осторожностью относился к чему-либо из Карла, он часто широко расчесывал вещи и пропускал тонкости - но никто из нас не идеален. – Bob77