Правильный способ разработки с учетом ограничений Windows UAC? - PullRequest
7 голосов
/ 31 августа 2009

Я обнаружил, что написанное мной приложение не работает должным образом в Windows Vista / 7, если UAC включен на любом уровне, потому что оно записывает файлы в каталог установки программы, по умолчанию это C: \ Program Files \ MyProgram. " Если UAC отключен (или в любой другой версии Windows), он работает правильно - я прочитал, что UAC по умолчанию запрещает приложениям доступ на запись в каталог Program Files.

Мой вопрос, ну, как мне написать свое приложение, чтобы оно могло использоваться без каких-либо "прав", необходимых вообще. Я не хочу, чтобы пользователи запускали его с повышенными правами или как администратор. Я просто хочу, чтобы это сработало. Существуют ли определенные каталоги, к которым какое-либо приложение имеет доступ на запись под UAC, куда лучше было бы записать мои файлы? В основном это файлы конфигурации, которые динамически создаются / уничтожаются / обновляются.

Спасибо за помощь!

Ответы [ 2 ]

12 голосов
/ 31 августа 2009

Специфичные для каждого пользователя данные должны быть записаны в папку AppData.

Вы должны использовать SHGetKnownFolderPath с FOLDERID_LocalAppData.

В управляемом коде следует использовать System.Environment.GetFolderPath с System.Environment.SpecialFolder.LocalApplicationData.

4 голосов
/ 31 августа 2009

Да, есть определенные места. Рассмотрим эту статью MSDN в качестве первой ссылки. Здесь упоминаются места:

  • CSIDL_APPDATA
  • CSIDL_LOCAL_APPDATA
  • CSIDL_COMMON_APPDATA

В нативном коде метод SHGetKnownFolderPath должен оказаться полезным.

В управляемом коде вы можете использовать Environment.GetFolderPath(). Если вы находитесь в определенной среде приложения, такой как формы Windows, вы можете получить еще более простой доступ через прямые свойства, такие как Application.LocalUserAppDataPath (это мой личный любимый прием) Путь к структуре будет включать специфичные для приложения квалификаторы по пути, который он возвращает, чтобы различать (например) различные версии вашего приложения.

...