2

В Windows 7 с помощью проводника Windows я сохранил резервную копию файла C:\Program Files\Microsoft Visual Studio\VC98\ATL\Include\ATLCOM.H, переименовав его, и затем скопировал новую, немного другой файл на место (как ATLCOM.H в том же каталоге).

Затем я открыл IDE Microsoft Visual C++ 6.0 и скомпилировал свой проект (который опирается на ATLCOM.H). Я заметил, что скомпилированный исполняемый файл вел себя так, как будто я не внес свои изменения.

Затем (чтобы проверить, действительно ли я внес изменения) я открыл файл из среды IDE. Мои изменения НЕ присутствовали. Но если я открыл файл в каком-то другом редакторе, изменения присутствуют. В общем, я попытался открыть файл четырьмя отдельными программами; за исключением VC++ 6.0, мои изменения присутствуют, когда файл открывается во всех них. Более того, если я внесу другое изменение в файл из VC++ 6.0 и сохраню его, содержимое файла, по-видимому, не изменится при просмотре из других программ, но если я закрою VC++ 6.0 и снова открою его, изменение, которое я внес из в VC++ 6.0 все еще есть. Так что это где-то записывается на диск.

Затем я обнаружил, что если я запускаю VC++ 6.0 через "Запуск от имени администратора", содержимое файла выглядит (изнутри VC++ 6.0) так же, как и из других программ. Если я запускаю это без "как администратор", они разные.

Я предполагаю, что, возможно, что-то происходит, например, Windows (или сама IDE), объединяющая два отдельных "настоящих" каталога в один виртуальный каталог? Аналогично тому, как Windows может объединить «C:\Users\Public\Documents» и «C:\Users\Bob\Documents» в то, что с точки зрения пользователя выглядит как один каталог? И как именно это слияние зависит от того, запускаю ли я IDE от имени администратора или нет?

Кто-нибудь знает, что здесь происходит? Существуют ли какие-то каталоги, к которым я могу получить доступ через проводник Windows (или приглашение оболочки или что-то еще), которые позволят мне действительно видеть два фактических файла, а не просто кажущийся объединенным C:\Program Files\Microsoft Visual Studio\VC98\ATL\Include? Заранее спасибо.

1 ответ1

4

Ваша проблема в том, что вы используете Visual C++ 6.0. Эта версия MSVC древняя. Вы, вероятно, столкнулись с проблемой с функцией виртуального магазина, присутствующей в Windows Vista и далее.

Вот что происходит:

Программа, вероятно, пытается сохранить данные в своей папке «Program Files» вместо папки вашего профиля пользователя. В Windows 7 записи в папку «Program Files» автоматически и прозрачно перенаправляются в папку «Virtual Store» в каталоге вашего профиля пользователя. Когда вы выбираете «Запуск от имени администратора», запись в Program Files завершается успешно, и перенаправление не происходит.

Проверьте следующее:

Посмотрите в C:\Users\\AppData\Local\VirtualStore. Вы видите там WINDOWS и папку Program Files? Если да, есть ли файлы, относящиеся к VC6.0? Если так, то это то, что происходит с вами.

Ваше единственное решение - либо всегда запускать с правами администратора, либо никогда не выполнять с правами администратора, чтобы поведение всегда было согласованным. Вы также можете отключить функцию VirtualStore из локального редактора групповой политики (он больше не отключается при отключении UAC, как в Windows Vista).

В качестве альтернативы, вы можете перейти на более новую версию Visual C++ (которую я очень рекомендую, потому что, как я уже сказал, 6.0 является древним).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .