Проблема с правами на запись файла в папку "Program Files"

Я использую 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.

Мои вопросы:

  • Почему все папки отмечены как прочитанные только в Program Files? Это означает, что мы не должны писать в отдельные папки приложений в Program Files? Если нет, то где мы должны записывать информацию на диск, такую ​​как последняя выбранная пользователем информация о конфигурации отдельного приложения?
  • Если бы мы могли писать в отдельные папки приложений в Program Files, то каково это решение? Я не хочу, чтобы мое приложение запускало как администратор, чтобы решить эту проблему, и если есть решение для записи в эту папку, я хочу, если возможно, получить минимальное разрешение.

Ответы

Ответ 2

Лучшей практикой является не сохранять конфигурационные данные в папке 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

Ответ 3

Общим решением было бы установить файлы конфигурации в папку данных приложения, например, следующим образом:

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)