Содержимое файла отличается в зависимости от запуска IDE "как администратор" или нет?
В 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 ответ
Ваша проблема в том, что вы используете Visual C++ 6.0. Эта версия MSVC является древней. Вы, вероятно, столкнулись с проблемой с функцией виртуального магазина, присутствующей в Windows Vista и более поздних версиях.
Вот что происходит:
Программа, вероятно, пытается сохранить данные в своей папке в папке "Program Files" вместо папки вашего профиля пользователя. В Windows 7 записи в папку Program Files автоматически и прозрачно перенаправляются в папку Virtual Store в каталоге вашего профиля пользователя. When you select to Run as Administrator, writes to Program Files succeed and that redirection doesn't happen.
Проверьте следующее:
Look under C:\Users\\AppData\Local\VirtualStore. Do you see a WINDOWS and a Program Files folder under there? If so, are there files relating to VC6.0? If so, then this is what is happening to you.
Your only solution would be to either always run as administrator or never run as administrator so that the behavior is always consistent. You could also disable the VirtualStore feature from the local Group Policy editor (it no longer gets disabled when you turn UAC off the way it did in Windows Vista).
Alternatively, you could upgrade to a newer version of Visual C++ (which I would highly recommend because like I said, 6.0 is ancient).