【发布时间】:2011-10-11 19:41:45
【问题描述】:
我正在 Windows 7 上编写一个小型 .NET 程序。它需要做的一件事是创建符号链接,这似乎需要我拥有管理员权限。它还需要能够使用映射的网络驱动器(例如,R:\,它在我的系统上映射到 \\titanium\Private\)。
我正在使用Directory.Exists(path) 来验证路径是否存在。
当以普通用户(管理员帐户,但不是“以管理员”身份)运行程序时,这在映射的网络驱动器上运行良好。
以管理员身份(使用 UAC)运行程序时,找不到存在的目录。结果,程序拒绝承认R:\Steam Games\ 是一个实际存在的目录。
我有点困惑为什么会这样。使用完整的 UNC 路径 (\\titanium\Private\Steam Games\) 也不起作用。
以前有人遇到过这种情况吗?有什么好的解决方法吗?我是否必须将路径格式设置为不同(注意:它们中的大多数当前格式为Path.Combine,所以它们应该是正确的)。
感谢您的帮助。
(例如,Directory.Exists(@"R:\Steam Games\") 以管理员身份运行时返回 false,但该文件夹存在。函数调用在正常运行时正确返回 true)。
编辑:问题确实似乎是管理员在技术上是不同的用户帐户。我什至不能使用 UNC 路径,因为我只在我的普通用户下登录到我的文件服务器,而不是在“管理员”下。作为一个(相对骇人听闻的)解决方法,我只是以常规权限运行我的程序,然后使用Process.Start 调用带有参数的 cmd.exe 实例以创建符号链接(以及动词“runas”以获取 UAC 提示) .
【问题讨论】:
-
投票以离题结束。这里的问题是 UAC(并且 UAC 用户与非 UAC 用户不在同一个会话中),它与编程无关。
-
我认为这是非常有话题的,作为程序员,如果最终用户决定提升您的程序,您需要远离发生的问题。
-
我同意斯科特的观点。这是一个常见的编程问题,我认为这是一个很好的网站。