2008-11-17 4 views
1

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

ответ

6

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

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

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

+0

Что такое «предоставленный механизм» для приложения .NET? – skb 2008-11-18 04:38:22

+0

Joel, папка .. \ All Users \ Application также доступна только для чтения для обычных пользователей. Рекомендация заключается в добавлении подкаталога, доступного для записи, во время установки. – RoadWarrior 2008-11-19 21:16:18

1

Чтобы добавить некоторые детали к ответу Иоиля:

  • В Win2K и XP, CSIDL_APPDATA следует использовать для каждого пользователя, плавающее. В Vista это FOLDERID_RoamingAppData.

  • В Win2K и XP CSIDL_LOCAL_APPDATA следует использовать для для пользователей, не входящих в роуминг. В Vista это FOLDERID_LocalAppData.

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

NB Эта последняя папка обычно предназначена для чтения только для пользователей, не являющихся пользователями без права доступа. Рекомендуемым решением для этого является создание подпапки чтения/записи во время установки приложения.

EDIT: Для того, чтобы получить фактические местоположения этих констант на конкретной машине с помощью управляемого кода, попробуйте System.Environment.GetFolderPath с константами, определенными here. Еще одна полезная ссылка: here.