Получение папки с данными приложения для каждого пользователя - PullRequest
3 голосов
/ 08 сентября 2011

В моем приложении каждый пользователь имеет свои собственные настройки, которые я сохраняю в подкаталоге в каталоге Application Data этого пользователя. Во время удаления я хочу удалить эти настройки для каждого пользователя на компьютере. Как я могу сделать это в Inno Setup?

Другими словами, мне нужно получить список, содержащий каталог данных приложения для каждого пользователя (не общий каталог данных приложения), чтобы я мог удалить каталог MyAwesomeApp оттуда. Есть ли способ сделать это?

Ответы [ 2 ]

6 голосов
/ 08 сентября 2011

Вы не можете, из-за дизайна Windows .Тот же дизайн не дает вам доступа и к папкам профилей.

Кроме того, рекомендуется оставлять данные пользователя на случай, если они захотят переустановить его, перемещать профили и т. Д.

2 голосов
/ 16 сентября 2011

Предполагая, что ваш деинсталлятор работает с привилегиями администратора, вы можете просто получить каталог User и затем перечислить все каталоги пользователей там.

Вы можете запустить исполняемый файл из Inno Setup, написанный на любом языке, который вы хотите. В нем вы можете сначала получить каталог данных приложения текущего пользователя, используя функцию SHGetSpecialFolderPath . Для Win7 это будет выглядеть примерно так:

c:\Users\MyUser\AppData\Roaming\

Вы можете использовать GetUserName , чтобы получить имя пользователя (в данном случае MyUser), найти родительский каталог и разбить строку на родительский каталог «C: \ Users \» и «AppData \ Roaming». \». Затем вы можете использовать FindFirstFile / FindNextFile для перечисления всех пользовательских каталогов и просто добавить к ним вторую часть «AppData \ Roaming \» и проверить, существует ли файл. Разделив каталог, который вы получаете от SHGetSpecialFolderPath, вы гарантируете, что он будет работать как в XP (которая будет возвращать что-то вроде C: \ Documents and Settings \ MyUser \ Application Data "), так и в Win7. По сути, вы просто заменяете MyUser всеми именами пользователей в строке, возвращаемой SHGetSpecialFolderPath.

Понятия не имею, позволяет ли это избежать безопасности ОС или работает с роуминг-пользователями.

...