Ответ 1
Вы должны написать пользовательские данные конфигурации в папку Application Data для текущего пользователя, используя специальное перечисление папок и Enivronment.GetFolderPath.
Я использую inno setup, чтобы сделать установочный пакет для моего приложения, а мое приложение написано С# +.Net 2.0 + VSTS 2008. Inno setup = > http://www.jrsoftware.org/isinfo.php, и я устанавливаю свое приложение в папку Program Files/Foo (Foo - это мое имя приложения). Мое приложение предназначено для Windows Vista.
Я обнаружил, что моя программа не может записать в папку Program Files/Foo. И мне нужно разрешение на запись в эту папку, чтобы сохранить некоторые файлы конфигурации. Странная вещь, которую я замечаю, это папка Program Files/Foo, которая помечается как readonly, и я проверил все папки в разделе Program Files, отмеченные только как чтение, например Office.
Мои вопросы:
Вы должны написать пользовательские данные конфигурации в папку Application Data для текущего пользователя, используя специальное перечисление папок и Enivronment.GetFolderPath.
Лучшей практикой является не сохранять конфигурационные данные в папке Program Files. Вместо этого сохраните данные приложения в% AppData%\YourApplicationName. В зависимости от того, хотите ли вы сохранить данные конфигурации для каждого пользователя или в общей общей папке, используйте один из следующих перечислений, чтобы получить путь к папке:
string userAppData = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
string commonAppData = Envrionment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);
По умолчанию пользователи Vista не запускают программы как администраторы, и поэтому эти программы имеют только доступ для чтения к папкам в разделе "Файлы программы". Пользователи могут изменить это поведение, отключив UAC, и вы можете попросить своих пользователей сделать это, но в офисе у пользователей может не быть этого параметра. Поэтому вместо этого вы используете AppData - приложения всегда могут читать и записывать данные в папку AppData.
Информацию о UAC можно найти на сайте Microsoft. Хотя эта страница довольно длинная, она является отправной точкой для понимания UAC: http://msdn.microsoft.com/en-us/library/bb530410.aspx
Общим решением было бы установить файлы конфигурации в папку данных приложения, например, следующим образом:
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)