2009-02-18 3 views
2

У нас есть программа, в которой установщик проверяет наличие файла конфигурации, и, если он существует, он не копирует этот файл (предполагается, что пользователь изменил свой файл конфигурации и хочет сохранить эти модификации). К сожалению, это приложение до Vista и хранит файл конфигурации в Program Files. Проблема в том, что если вы вручную уничтожили каталог, когда он переустанавливает определенный API, все еще думает, что там есть каталог. VB6, например, и его поиск в диалоговом окне файла видит папку, однако explorer, cmd shell и т. Д. Не могут видеть папку. Написание файла по-прежнему оставляет старый файл (для некоторых API, но не для проводника), который нельзя удалить, кроме формы в диалоговом окне «Обзор файла».Vista Phantom Directory

Что происходит с этими папками Phantom и как мы удаляем файл, чтобы все API отображали одно и то же? Возможно, это связано с TxF или индексом для поиска, но как установщик, используемый нами (InnoSetup), так и части приложения (части, написанные на VB6), видят старую версию файла, а все остальное видит текущая версия.

+1

Просто для кого-то думает% AppData% был изобретен или толкания для с Vista - это не тот случай. Хранение материалов в текущем пользовательском улье или папке% appdata%, например, довольно старое и правильный способ делать что-то. Я никогда не работал как локальный администратор даже на NT4 damnit ^^ –

ответ

5

Как сказал Оскар Дювеборн, очень вероятно, что то, что вы видите, - это виртуализация Виста.

Когда машина имеет контроль учетных записей пользователей (UAC), стандартным пользователям и невыполненным программам не разрешается писать в папку «Программы». Windows вместо этого автоматически перенаправляет файлы в соответствующую подпапку %AppData%\Local\VirtualStore (например, C:\Users\MyUser\AppData\Local\VirtualStore).

Если вы просматриваете реальную папку в Проводнике, вы увидите кнопку панели инструментов «Совместимость», которую вы можете использовать для просмотра виртуального хранилища.

Обратите внимание, что это только совместимость с Windows - ваша программа должна писать в свою собственную подпапку %AppData%.

Для получения дополнительной информации см. this TechNet Magazine article.

0

Вы имеете в виду папку AppData (C: \ Documents and Settings \ UserName \ AppData)? Я не на моей машине с Vista, но я думаю, что это путь, и afaik он не стирается после удаления.

+0

Ничего общего с AppData, это связано с% ProgramFiles% (C: \ Program Files) и тем, как Vista его обрабатывает. По многим причинам мы не можем переместить конфигурацию в AppData, где она должна быть. –

5

Dunno, если я нахожусь на правильном пути, но не виртуализует% программных файлов% для приложений, которые пытаются записать на него или иным образом помечены как «не так ли?». (и, следовательно, перемещает его где-то в пользовательскую часть файловой системы, не сообщая устаревшему приложению об этом - делая его прозрачным) ..?

Виртуальный магазин Переадресованные файлы хранятся где-то в% appdata% - вы также можете узнать местоположение, установив флажок «Файлы совместимости» в проводнике, когда находится в псевдониме. Вам нужно прекратить писать% programfiles%, чтобы избавиться от этого поведения, насколько мне известно.

+0

Да, я думаю, что вы на правильном пути, но где эта пользовательская часть файловой системы? –

0

Ссылка TechNet от Ant выше (принятый ответ) больше не действительна. Новая ссылка:

http://support.microsoft.com/kb/927387 - Общий файл и проблемы виртуализации реестра в Windows Vista