Перемещение папки данных VB6 из программных файлов - PullRequest
3 голосов
/ 20 декабря 2010

Я поддерживаю приложение VB6, которое хранит свои данные (файлы доступа) в подпапке папки приложения.Таким образом, когда пользователь устанавливает приложение в папку по умолчанию C:\Program Files\MyApp, данные попадают в виртуальное хранилище.Теперь я получил прекрасную задачу по преобразованию 1000 или около того операторов App.Path в путь к папке данных, которая не будет иметь проблем с безопасностью.Может ли кто-нибудь помочь мне, указав путь к некоторым ресурсам, которые будут подсвечивать мне, как обрабатывать данные в папке Users\< Username>\AppData\Local\?
Должен ли я использовать локальную папку AppData или я могу предложить пользователю выбрать подходящее место

Ответы [ 3 ]

2 голосов
/ 21 декабря 2010

Хорошо, если мы предположим пару вещей:

  • Это проблема только для Vista или более поздней версии.
  • Ваши данные находятся в подпапках , подApp.Path.

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

Обратите внимание, что я использую этот трюк только тогда, когда у меня есть куча старых программ VB6, которыебыли написаны для использования данных в папках под App.Path, что-то вроде быстрого и грязного взлома, чтобы заставить многие программы работать быстро.Я почти всегда добавляю или обновляю также манифест приложения, в основном для предотвращения виртуализации.


Внесенные мной изменения:

  • Добавление небольшого кода в Sub Main (вставкаSub Main, если у программы его еще нет).
  • Добавьте в проект два модуля Class (вызванных новым кодом Sub Main).

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

После первого запуска все должно быть в порядке.работает так же, как в Windows 2000, XP и т. д.


Этот код запуска, требующий повышения прав, предоставляет список подпапок App.Path, необходимых для класса PathLinks.

Pathlinksсоздает папку программы в специальной папке Public, а затем создает соответствующие подпапки для данных в этой папке.Затем он перемещает любые файлы и подпапки в этих подпапках App.Path в новые места.Наконец, он создает символические ссылки на новые папки в App.Path.

При запуске под Windows до Vista, PathLinks просто создает любой из списка подпапок App.Path (в App.Path), которые неуже существует (т. е. путем установки).

С этого момента программа найдет файлы в новом месте без каких-либо изменений в использовании App.Path.


Один из двух классов надстроек является косметическим, и вы можете удалить его.Он просто позволяет коду запуска вызывать TaskDialog вместо использования вызова MsgBox.

Обязательно прокрутите вниз до последней версии, опубликованной в PathLinks - Tame App.Path под Vista +

Обратите внимание, что в примере проекта пропускается запуск приложения при выполнении этого трюка с «повышенным уровнем в первый раз».Он просто выполняет Sub Sub в Sub Main после перемещения данных и ссылки на них.

1 голос
/ 20 декабря 2010

Я бы использовал локальную папку AppData:

Dim sAppData As String

sAppData = Environ("USERPROFILE") & "\AppData"
0 голосов
/ 27 декабря 2010

Полезное обсуждение можно найти здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...