Безопасность файлов в Windows Vista с помощью установщика .NET

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


person skb    schedule 17.11.2008    source источник


Ответы (2)


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

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

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

person Joel Coehoorn    schedule 17.11.2008
comment
Какой механизм предусмотрен для приложения .NET? - person skb; 18.11.2008
comment
Джоэл, папка .. \ All Users \ Application также доступна только для чтения обычным пользователям. Рекомендуется добавить подпапку с возможностью записи во время установки. - person HTTP 410; 20.11.2008

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

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

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

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

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

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

person HTTP 410    schedule 17.11.2008
comment
Как мне получить значения для этих папок из приложения .NET? - person skb; 18.11.2008