Possible Duplicate:
VS2008 Setup Project: Shared (By All Users) Application Data Files?
Кто-нибудь может посоветовать, где лучше всего разместить некоторые данные приложения, которые должны быть доступны и доступны для редактирования всем пользователям.
Это касается как Windows XP, так и Windows Vista, и я ожидаю, что изменение любого файла по указанному выше пути НЕ запускает UAC!





Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)
Должен разрешиться в C: \ Documents and Settings \ All Users \ Application Data \
Оттуда создайте подпапки, такие как MyCompany \ MyApp
% ALLUSERSPROFILE% \ Application Data \ App
это, вероятно, единственный каталог, к которому все пользователи могут получить доступ без повышенных привилегий.
Если вы используете .NET, Application.CommonAppDataPath должен работать.
Обычный Win API: SHGetFolderPath с CSIDL_COMMON_APPDATA в качестве типа папки.
Если пользователи не собираются изменять данные напрямую, и они будут изменены только приложением, как насчет IsolatedStorage - http://msdn.microsoft.com/en-us/library/3ak841sy(VS.80).aspx
Checkers дает жизненно важный ключ к тому, чтобы сделать это на C или C++. Итак, я проголосовал за его ответ.
Вот детали, которые он упустил:
// assumes
// company is a pointer to a character sting containing company name
// appname is a pointer to a character string containing application name
// fname is a pointer to a character string cintaining name of file to be created
#include <shlobj.h> // for SHGetFolderPath
#include <direct.h> // for _mkdir
char path[MAX_PATH];
SHGetFolderPath(NULL,CSIDL_COMMON_APPDATA,NULL,NULL,path);
strcat(path,"/");
strcat(path,company);
_mkdir(path);
strcat(path,"/");
strcat(path,appname);
_mkdir(path);
strcat(path,"/");
strcat(path,fname);
// path is now a character string which can passed to fopen
If you're using .NET, Application.CommonAppDataPath should work. Also make sure that virtualization is turned off for your application
Вы также можете поместить его в базу данных.
Для Vista и выше MS, похоже, настаивает на использовании SHGetKnownFolderPath () вместо SHGetFolderPath (). Выбираете какую папку просить из список ИЗВЕСТНЫХ ПАПКИ. Судя по приведенным здесь ответам, вам, вероятно, будет нужен эквивалент FOLDERID_ProgramData. Я понимаю, что этот вопрос довольно старый, но я предполагаю, что для архивных целей ..
Это довольно жестко, и папка «Application Data» может быть на другом языке. Есть ли способ интернационализировать имя «Папка приложения»?