Отсутствует файл из папки Vista ProgramData
У меня есть устаревшая программа VB6, которая устанавливает файл Access в подкаталог общей папки данных (CSIDL_COMMON_APPDATA). Я установил эту программу в 64-разрядной системе Vista, и программа работает нормально и обращается к файлу по адресу C:\ProgramData\Wow\WowCat.mdb, но этот файл не отображается в проводнике Windows.
Я хочу перезаписать эту базу данных более поздней версией, взятой из моего старого компьютера, но в Проводнике я не вижу файл в C:\ProgramData\Wow\ (я показываю все скрытые и системные файлы). Если я все равно скопирую новый WowCat.mdb, программа все равно будет работать со старым.
Шагнув код в VB, он определенно открывает файл по адресу: C:\ProgramData\Wow\WowCat.mdb. Поиск на диске C: показывает только новую копию, так где же находится та, к которой обращается программа?
2 ответа
Это из-за перенаправления папок в Windows Vista. Если у вас обычно нет прав на запись чего-либо в папку C:\Program Files, Vista автоматически перенаправит эти записи в "секретную" папку внутри вашего пользовательского каталога. Файл по-прежнему будет виден для пользователя, который его создал (и для всех программ, работающих от имени этого пользователя), но он не будет виден никому другому. Таким образом, ваша программа, вероятно, работает от имени другого пользователя, чем Explorer, и поэтому Explorer не может ее увидеть.
Посмотрите следующий вывод dir /aL на моей 64-битной машине Vista:
C:\ProgramData>dir /aL
Volume in drive C has no label.
Volume Serial Number is 74DB-58F8
Directory of C:\ProgramData
02.11.2006 16:41 <JUNCTION> Application Data [C:\ProgramData]
02.11.2006 16:41 <JUNCTION> Desktop [C:\Users\Public\Desktop]
02.11.2006 16:41 <JUNCTION> Documents [C:\Users\Public\Documents]
02.11.2006 16:41 <JUNCTION> Favorites [C:\Users\Public\Favorites]
02.11.2006 16:41 <JUNCTION> Start Menu [C:\ProgramData\Microsoft\Windows\Start Menu]
02.11.2006 16:41 <JUNCTION> Templates [C:\ProgramData\Microsoft\Windows\Templates]
0 File(s) 0 bytes
6 Dir(s) 62 040 051 712 bytes free
Эта функция известна как точки повторного анализа или соединения, в зависимости от того, где вы о них читаете. Они очень похожи на символические ссылки в Unix.
Чтобы сделать это правильно, требуется MSI установщика Windows или устаревший установщик, работающий с повышенными правами, создает подпапку в CommonAppDataFolder, предоставляет полный доступ для всех (или соответствующей группы) к этой папке и, наконец, помещает туда свою MDB. Вы также можете создать папку, переместить туда файл MDB и установить права доступа только для этого файла.
Кроме того, сам EXE может сделать это при первом запуске, если он запускается с повышенными правами или обнаруживает упущение и порождает повышенный процесс для выполнения этой работы. Стандарты предписывают, что это действие должно быть инициировано с помощью пункта меню или кнопки с отображаемым значком щита UAC, а не просто при появлении приглашения UAC.
Это все намного проще с помощью пакета MSI.