Установщик Nullsoft, Win7, как установить каталоги для чтения / записи данных? - PullRequest
2 голосов
/ 15 июля 2011

Мы создали установщик (Nullsoft Install System v2.46), который устанавливает приложение, плюс некоторые (вложенные) каталоги данных, которые включают (текстовые) файлы данных, доступ к которым осуществляется на чтение / запись из установленного применение.

Все отлично работает на WinXP: приложение загружается, и файлы можно читать / записывать из каталогов данных, вложенных в каталог установки.

Однако при установке в Win7 / 64 каталоги данных, созданные как часть установки, доступны только для чтения. Таким образом, приложение загружает файлы данных, но не может перезаписать их (поскольку они находятся в каталоге данных только для чтения в каталоге установки).

Да, поскольку это Win7-64bit, каталоги данных находятся в:

  C:\Program Files (x86)\MyApp\MyDataDir0

Я понимаю, что Win7 более строг в своей политике установки, чем предыдущие WinOS (по соображениям безопасности).

ВОПРОС: Какой механизм мы должны использовать для обеспечения того, чтобы эти каталоги данных были доступны для чтения / записи и чтобы (текстовые) файлы данных в них также считывались / записывались во время установки?

Эти файлы данных не зависят от пользователя, они подразумевают данные, необходимые для запуска программы. (Без них программа бесполезна.) Логически они являются файлами «программной системы», хотя мы могли бы рационализировать, что они представляют «расширяемые наборы данных», используемые программой (поэтому они должны быть доступны для чтения / записи).

Для простоты и согласованности мы бы действительно решили обратиться к установщику, а не изменять права доступа к файлам / каталогам изнутри программы. Мы бы предпочли, чтобы эти данные существовали там, где установлено приложение, а не в некоторых C:/Users/Default/. или C:/ProgramData/MyApp/. каталог.

Интересует ли нас «чтение / запись» в отношении data-dirs-under-app-install-dir к политике Win7? (Разве мы не должны устанавливать их там?)

Ответы [ 2 ]

2 голосов
/ 16 июля 2011

Если вы полагаетесь на запись в% ProgramFiles%, ваша программа в основном не работает на каждой версии WinNT, вы просто не смогли протестировать ее как неадмина!

Если вы хотите разрешить всем пользователям доступ для записи в файл или папку, используйте плагин Контроль доступа . Делая это, вы теряете немного безопасности. Чтобы снизить риск, убедитесь, что файлы данных хранятся в подкаталоге (%ProgramFiles%\MyApp\Data или что-то в этом роде), и не предоставляйте обычным пользователям права на запись в папки с файлами .exe или .dll.

Что вы действительно должны сделать, это скопировать файлы из% ProgramFiles% в% AppData% при первом запуске вашей программы, таким образом, каждый пользователь получает свои собственные настройки, и нет проблем с безопасностью.

1 голос
/ 15 июля 2011

На самом деле ваше приложение не работает в Windows XP, где пользователь не является администратором.Разрешения по умолчанию для каталога Program Files в Windows 7 / Vista такие же, как в Windows XP.

Из вашего описания, эти файлы не являются Program Files, а скорее файлами Program Data, поэтому лучше хранить их вкаталог ProgramData.Чтобы узнать его местоположение, вызовите функцию SHGetFolderPath с параметром CSIDL_COMMON_APPDATA.Однако даже в этом случае вам может потребоваться отредактировать права доступа к папке приложения, чтобы разрешить запись любому пользователю.

Если вы по-прежнему хотите сохранять файлы в программных файлах, тогда единственный вариант - изменить разрешение данныхпапки во время установки.

...