Я пытаюсь написать установщик (путем создания .vdproj), который будет работать как в Windows Vista, так и в XP. Единственное, что я обнаружил, это то, что когда я пытаюсь запустить его в Vista, файлы, которые я включаю в программу установки, устанавливаются с разрешениями только для чтения для групп пользователей. Это проблема, потому что приложению необходимо читать / писать из этих файлов. Единственный способ заставить его работать - это либо «Запуск от имени администратора», либо фактическое изменение разрешений. Кто-нибудь знает, как сделать эти файлы открытыми для записи? Спасибо.
Безопасность файлов в Windows Vista с помощью установщика .NET
Ответы (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()
.
Чтобы добавить некоторые детали к ответу Джоэла:
В 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 с определенными константами здесь. Еще одна полезная ссылка: здесь.