Безопасность файлов в Windows Vista с установщиком .NET - PullRequest
1 голос
/ 17 ноября 2008

Я пытаюсь написать установщик (создавая .vdproj), который будет работать как в Windows Vista, так и в XP. Единственное, что я нахожу, это то, что при попытке запустить его в Vista файлы, которые я включаю в установщик, устанавливаются с правами «Только чтение» для групп «Пользователи». Это проблема, потому что приложение должно читать / писать из этих файлов. Единственный способ заставить его работать - это «Запуск от имени администратора» или изменение прав доступа. Кто-нибудь знает, как сделать эти файлы открытыми для записи? Спасибо.

Ответы [ 2 ]

6 голосов
/ 17 ноября 2008

Папка Program Files и ее содержимое доступны только для чтения обычным пользователям. Это сделано специально, и вы обнаружите, что это относится и к Windows XP. Это просто в Windows XP, так что многие люди работают с правами администратора все время, что вам может сойти с рук Это. Если вы когда-нибудь захотите распространить свое приложение в бизнес-среде, вы скоро обнаружите, что оно не будет работать там и на XP.

Решение - НЕ помещать файлы в исполняемую папку программы, если обычным пользователям понадобится доступ для записи. Поместите их в папку Application Data. Для большинства машин XP это будет здесь:
C: \ Documents And Settings \ Все пользователи \ Данные приложения \ Ваше приложение

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

1 голос
/ 17 ноября 2008

Чтобы добавить некоторые детали к ответу Джоэла:

  • В Win2K и XP CSIDL_APPDATA следует использовать для на пользователя, роуминг . В Vista это FOLDERID_RoamingAppData.

  • В Windows 2000 и XP CSIDL_LOCAL_APPDATA следует использовать для для пользователя, без роуминга . В Vista это FOLDERID_LocalAppData.

  • В Win2K и XP CSIDL_COMMON_APPDATA должен использоваться для на машину , то есть всех пользователей приложения. В Vista это FOLDERID_ProgramData.

NB. Эта последняя папка, как правило, доступна только для чтения и не имеет прав администратора. Рекомендуемое решение - создать подпапку для чтения / записи во время установки приложения.

РЕДАКТИРОВАТЬ: Чтобы получить фактическое расположение этих констант на определенной машине с помощью управляемого кода, попробуйте System.Environment.GetFolderPath с константами, определенными здесь . Еще одна полезная ссылка здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...