文件的内容根据运行IDE“作为管理员”而不同?


2

在Windows 7中,使用Windows资源管理器,我通过重命名它保存了文件C:\ Program Files \ Microsoft Visual Studio \ VC98 \ ATL \ Include \ ATLCOM.H的备份副本,然后我复制了一个新的,稍微不同的文件到位(在同一目录中为ATLCOM.H)。

然后我打开了Microsoft Visual C ++ 6.0 IDE,并编译了我的项目(依赖于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资源管理器(或shell提示符或其他)访问,这将允许我真正看到两个实际文件,而不仅仅是看似合并的C:\ Program Files \ Microsoft Visual Studio \ VC98 \ ATL \包括哪些内容?提前致谢。


看起来虚拟商店再次袭来(正如Wes Sayeed回答的那样)!我理解为什么微软创建了这个功能,但肯定会引起一些令人困惑的问题。
lzam

Answers:


4

您的问题是您使用的是Visual C ++ 6.0。那个版本的MSVC很古老。您可能会遇到Windows Vista中存在的虚拟存储功能问题。

这是发生了什么:

该程序可能正在尝试将数据保存在Program Files下的自己的文件夹中,而不是用户配置文件夹中。在Windows 7中,对Program Files文件夹的写入将以静默方式透明地重定向到用户配置文件目录中的Virtual Store文件夹。当您选择以管理员身份运行时,对程序文件的写入成功,并且不会发生重定向。

检查以下内容:

在C:\ Users \\ AppData \ Local \ VirtualStore下查看。你看到WINDOWS和Program Files文件夹吗?如果是这样,是否有与VC6.0相关的文件?如果是这样,那么这就是你正在发生的事情。

您唯一的解决方案是始终以管理员身份运行,或者永远不以管理员身份运行,以便行为始终保持一致。您还可以从本地组策略编辑器中禁用VirtualStore功能(当您在Windows Vista中关闭UAC时,它不再被禁用)。

或者,您可以升级到较新版本的Visual C ++(我强烈推荐,因为就像我说的那样,6.0是古老的)。


这让我昨天疯了,来自M $的精彩功能
Lluís
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.