我正在Windows 7上编写一个小型.NET程序。它需要做的一件事是创建符号链接,这似乎要求我具有管理员权限。它还需要能够使用映射网络驱动器(例如,R:\,在我的系统上映射到\\titanium\Private\
)。.NET Directory.Exists在以管理员身份运行时拒绝映射网络驱动器的存在
我使用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用户不在同一个会话中),并且它与编程无关。 – Lucero
我认为这是非常重要的话题,作为一名程序员,如果最终用户决定提升您的程序,您需要避免发生的问题。 –
我同意斯科特。这是一个常见的编程问题,在我看来这是一个很棒的网站。 –