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

Я использую inno setup для установки пакета установки для своего приложения, и мое приложение написано C # + .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.

Мои вопросы,

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

Вы должны написать пользовательские данные конфигурации в папку «Данные приложения» для текущего пользователя, используя специальное перечисление папок и Enivronment.GetFolderPath .

Лучше всего не хранить данные конфигурации в папке Program Files. Вместо этого сохраните данные своего приложения в% AppData% \ YourApplicationName. В зависимости от того, хотите ли вы сохранить данные конфигурации для каждого пользователя или в общей общей папке, используйте один из следующих перечислений, чтобы получить путь к папке:

string userAppData = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); string commonAppData = Envrionment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData); 

По умолчанию пользователи Vista не запускают программы как администраторы, и, следовательно, эти программы имеют доступ только для чтения к папкам под «Program Files». Пользователи могут изменить это поведение, отключив UAC, и вы можете попросить своих пользователей сделать это, но в офисе у пользователей может не быть этого параметра. Именно поэтому вы используете AppData – приложения всегда могут читать и записывать данные в папку AppData.

Информацию о UAC можно найти на сайте Microsoft. Хотя эта страница довольно длинная, это отправная точка для понимания UAC: http://msdn.microsoft.com/en-us/library/bb530410.aspx

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

 Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) 
  • Как я могу получить страшные разрешения WRITE_SECURE_SETTINGS для моего приложения для Android?
  • adb remount разрешено, но доступно для доступа к суперпользователю в shell-android
  • Разрешение отклонено (отсутствует разрешение INTERNET?): Но предоставляется разрешение
  • Метод checkSelfPermission не работает в targetSdkVersion 22
  • IIS7 Не удалось предоставить запросы минимального разрешения
  • Разрешения Android M: onRequestPermissionsResult () не вызывается
  • Оверлей экрана обнаружены блоки Android-разрешения
  • База данных SQLite: только для чтения
  • Как использовать пользовательские разрешения в Android?
  • Как заставить приложение получать трансляцию, когда другие приложения установлены или удалены
  • Веб-просмотр Android: загрузка файлов, таких как браузеры
  • Interesting Posts

    Сервис недоступен при вызове geoCoder.getFromLocation ()

    jackson не десериализует общий список, который он сериализовал

    Как заблокировать сайты с помощью iptables

    Сенсорная панель Macbook Air не нажимает и не перемещает курсор, а жесты с несколькими пальцами работают

    Rails 3 представляет форму с несколькими записями

    Ящик навигации для переключения действий вместо fragmentов

    Ссылка. Что означает это регулярное выражение?

    Как добавить сертификат с самозаверенного сервера в доверенные сертификаты в Chrome?

    2 способа для «ClearContents» на VBA Excel, но 1 работает нормально. Зачем?

    Получение последних n элементов вектора. Есть ли лучший способ, чем использование функции length ()?

    Темная тень на панели навигации во время перехода segue после обновления до Xcode 5.1 и iOS 7.1

    Контрольный массив в VB.NET

    Атрибут службы WCF для вызовов и исключений журнала вызовов

    Ubuntu 10.10, работающий на ноутбуке Acer Aspire 5315, неожиданно закрывается

    Сброс пароля Windows 8

    Давайте будем гением компьютера.