我正在创建一个 WPF 应用程序,除其他外,它还应该检查多个映射驱动器是否存在。代码很简单:
DriveInfo[] systemDrives = DriveInfo.GetDrives();
foreach (DriveInfo i in systemDrives)
{
if ((i.Name.Contains("V")) && (i.IsReady))
{
result = true;
break;
}
}
映射的驱动器是为所有用户映射的。上面的代码在以普通用户身份运行时工作正常,但是如果以管理员身份运行 Visual Studio 2010,则 GetDrives 方法仅返回固定驱动器和 DVD 驱动器,而不返回映射驱动器。如果以管理员身份运行可执行文件,也会发生同样的情况。任何想法为什么会发生这种情况?
From http://www.vistaheads.com/forums/microsoft-public-windows-vista-general/125180-run-administrator-loses-access-mapped-drives.html,
(via http://social.technet.microsoft.com/Forums/en-US/w7itpronetworking/thread/31c9eff2-ece3-4430-886d-19b54796e411/):
这实际上是正常行为。正如您在 XP 上看到的那样,驱动器映射
特定于用户上下文。因此,如果 User1 有一个驱动器 H: 映射到
\server\share1,User2 不会自动获得对此的任何访问权限
H:驱动器映射;它仅存在于 User1 的会话中。如果用户2想要
访问 \server\share1,他们需要创建自己的映射,或者
H:驱动器或任何其他适合的驱动器。
嗯,这在 Vista 中是一样的......只是更多。
与以前版本的 Windows 不同,当管理员登录到
运行 Windows Vista 的计算机,用户具有完全管理员访问权限
令牌分为两个访问令牌:完全管理员访问权限
令牌和标准用户访问令牌。在登录过程中,
识别授权和访问控制组件
管理员被删除,从而产生标准用户访问令牌。
然后使用标准用户访问令牌来启动桌面,
Explorer.exe进程。因为所有应用程序都会继承其访问权限
从桌面的初始启动开始控制数据,它们都作为
标准用户也是如此。管理员登录后,完整的
在用户尝试之前不会调用管理员访问令牌
执行管理任务。
因此,当管理员“提升”执行某种操作时
需要管理访问权限,他们的“分割令牌”被替换,
暂时具有完整的管理令牌。实际上,这意味着
他们现在有不同的用户上下文。所以驱动器映射是
也改变了。因此 H: 驱动器不再具有有效的映射
当前的上下文。
我使用的解决方法是打开管理命令提示符
- 您始终拥有提升的令牌的位置 - 并从那里创建匹配的驱动器映射(net use h: \server\share1)。自从
标准用户和高级管理员有一个共同点
了解“H:”驱动器的含义后,一切运行正常。
我理解(嗯,有点!)为什么要进行这种设计。我不会
试图批评或捍卫它。但是你现在有了。
在理想的情况下,管理员能够配置
“全局”映射,自动应用于每个用户上下文
在机器上(几乎像真实设备一样)。但是,那并没有发生。
大多数操作系统都有一些杂乱的妥协,
不同程度的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)