为什么同一台机器上的两个控制台应用程序 return 来自 Directory.Exists(sameDirectory) 的不同结果?

Why would two console applications on the same machine return different results from Directory.Exists(sameDirectory)?

我有两个 .net 控制台应用程序,我 F10 调试并在同一台机器上的两个应用程序的第一行停止。

然后我将以下监视添加到两个 Visual Studio:Directory.Exists(@"C:\Program Files\MyDirectory")

一个申请 return true 而另一个 return false.

的可能原因是什么

returns true的应用程序是错误的,我可以在Windows资源管理器中验证并创建和删除目录。

我在错误地 returns true 的应用程序上尝试了以下操作:

  1. 排除了app.manifest文件,重新编译调试

  2. app.config 文件中删除了以下内容:


<system.web>
  <membership defaultProvider="ClientAuthenticationMembershipProvider">
    <providers>
      <add name="ClientAuthenticationMembershipProvider" type="System.Web.ClientServices.Providers.ClientFormsAuthenticationMembershipProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri=""/>
    </providers>
  </membership>
  <roleManager defaultProvider="ClientRoleProvider" enabled="true">
    <providers>
      <add name="ClientRoleProvider" type="System.Web.ClientServices.Providers.ClientRoleProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" cacheTimeout="86400"/>
    </providers>
  </roleManager>
</system.web>
  1. Visual Studio 都不是 运行 管理员,在任务管理器中和通过 System.Environment.UserName 我很确定两者都是 运行 作为同一用户。

还有什么可能导致此行为?

这是由 Windows Vista 中首次引入的 File and Registry Virtualisation 引起的,这意味着当应用程序满足条件时,它将看到 reads/writes 受保护的位置重定向到文件夹在路径 %UserProfile%\AppData\Local\VirtualStore 下(也可以到达 %localappdata%\VirtualStore。这意味着两个不同的应用程序可以获得 Program Files 文件夹内容的不同视图,例如:

C:\Users[Your_User_Name]\AppData\Local\VirtualStore\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE

C:\Program Files (x86)\microsoft visual studio 14.0\common7\ide

以我的 VirtualStore 文件夹层次结构中存在的示例文件夹为例。