2008-10-03 6 views
7

Можно создать дубликат:
VS2008 Setup Project: Shared (By All Users) Application Data Files?Лучшее место для размещения данных приложения?

Пожалуйста, может кто-то совет, что это лучшее место (путь), чтобы поставить некоторые данные приложения, которые должны быть доступны и редактироваться всеми пользователями.

Это касается как Windows XP, так и Windows Vista, и я ожидаю, что изменение в любом файле вышеуказанного пути НЕ запускает UAC!

ответ

2
Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) 

должны решить в C: \ Documents и Settings \ All Users \ Application Data \

Оттуда, сделать вложенные папки, такие как MyCompany \ MyApp

1

% ALLUSERSPROFILE% \ Application Data \ App
это, вероятно, единственный каталог, к которому могут обращаться все пользователи без повышенных привилегий.

+0

Это довольно привязано, и папка «Данные приложения» может быть на другом языке. Любой способ интернационализировать название «Папка приложения»? – Romias 2009-04-25 20:09:32

1

Если вы используете .NET, Application.CommonAppDataPath должен работать.

+0

это не только winforms-only? – 2010-05-25 20:56:55

1

Шашки обеспечивает жизненно важную подсказку, чтобы сделать это в 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 
2

Если вы используете .NET, Application.CommonAppDataPath должен работать. Также убедитесь, что виртуализация отключена для Вашего приложения

0

Вы также можете положить его в базу данных.

0

Для Vista и выше MS, похоже, нажимает для использования SHGetKnownFolderPath() вместо SHGetFolderPath(). Выберите нужную папку из list of KNOWNFOLDERIDs. На основании ответов здесь эквивалент, который вам нужен, вероятно, будет FOLDERID_ProgramData. Я понимаю, что этот вопрос довольно старый, но я думаю, для архивных целей.