Windows 10中的Visual Studio管理员模式

9

我不太确定我的确切问题,但是以下是情况:

我正在使用Visual Studio 2012开发一个应用程序(WinForms,C# .Net)。它可以完成许多任务,但重要的部分是需要从特定位置读取文件。

在这种情况下,文件的位置位于服务器上,我的计算机已经映射了网络驱动器以访问文件。 我可以手动使用Windows资源管理器导航到这些文件。

我的代码中有一行突出显示了该问题:

System.IO.File.Exists("X:\\A Folder\\a_file.txt");

那个文件确实存在于那个位置。然而,问题出在这里:如果我构建解决方案并直接从“bin”文件夹运行.exe(双击),代码就可以正常运行,并找到该文件。但是,如果我使用Visual Studio运行它,那么我会得到一个“文件未找到”的异常。
我认为这是因为Visual Studio正在以“管理员”模式运行(我忘记了为什么需要这样,但确实需要)。如果您考虑到“管理员”帐户没有映射“X:\”驱动器,那么这就有道理了。然而,直到上周我升级到Windows 10之前,这从来不是问题。
所以我的问题是:Visual Studio管理员模式在Windows 10中是否工作方式不同?在这种情况下,它是否以不同的方式处理映射的网络驱动器?
值得注意的是,我从Windows 7升级而来,因此无法确认此问题是否也存在于8和8.1中。
在有人问之前,让我们假设必须是映射的驱动器。不允许UNC路径!

也许这与你的问题无关,但是Windows 10不在VS 2012 Update 5支持的系统列表中。请参见http://www.microsoft.com/en-us/download/details.aspx?id=48708。你未来可能会遇到其他问题。 - qxg
@qxg:看起来我现在还停留在第4个更新版本,所以我可能会升级到第5个版本,看看是否有所改善... - musefan
在更新5上没有任何区别。 - musefan
3个回答

6
所以我找到了一个解决方案/解决方法。似乎现在赏金有些浪费了,如果有人有更好的建议,请发帖子,我会审查并根据情况奖励。或者,如果有人能制作出比我的解决方案更详细的版本,那我也会奖励他。
问题可能不仅限于Visual Studio,但在任何以提升的权限运行的应用程序中都会发生。无论如何,我找到的解决方案是添加一个注册表键,当以管理员模式运行时可以访问相同的共享驱动器。
注册表键位置为:

HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Policies/System

要添加的键称为:

EnableLinkedConnections

应创建为一个值为1(0x00000001)的DWORD。
我检查了运行Windows 7的机器,它们没有这个键,但它们仍然正常工作。所以我认为这不是唯一的解决方案,但它似乎有效(尚未注意到任何副作用)。我认为Windows 10默认情况下有一个特定的设置,防止映射驱动器自动在“以管理员身份运行”时可用。
参考资料,我在这里找到了信息
事实上,这里有一个更“官方”的建议,用于使用此注册表键。

有一个热修复可用。我不确定除了手动操作之外是否还有其他方法。这是链接:https://support.microsoft.com/en-us/kb/2878604 - Krsna Kishore

2

这与Windows 10无关,只与您的机器配置有关。您所描述的是正常现象,并已被此KB文章涵盖。我无法亲自检查,只需尝试推荐的解决方法,如有必要,请在superuser.com上跟进。


我尝试了第一种方法(它已经设置为“提示非Windows二进制文件的同意”,但我也尝试了建议的“提示同意”),但没有帮助。我不想尝试.bat方法,因为即使它能够工作,我也不想将其作为解决方案。我是唯一使用Windows 10的开发人员,也是唯一遇到这个问题的开发人员(因此我怀疑这不是域组策略问题)。在IT人员回到办公室时,我将与他们一起检查,以确定是否可以将其识别为GP问题,但我并不确定。 - musefan
哦,那篇文章提到的EnableLinkedConnections注册表键对你没有帮助吗?真遗憾。 - Hans Passant
甚至没有注意到,也许他们应该将其移动到“解决方法”部分,以便放置其他修复问题的建议。我已经给了你赏金,因为它将在几分钟后过期(而且我错过了注册表编辑部分),但我并不特别认为这是一个体面的答案...基本上只是一个“链接”的解决方案。 - musefan
好的,谢谢你提醒我不够好。下次考虑将跟进内容编辑到帖子中,这样就可以避免出现问题了。 - Hans Passant

0

不同的用户/系统任务可能正在运行。因此,您已经映射了X驱动器,但其他用户没有。您也可以在Windows安装中为其他用户进行驱动器映射。正如您所说,这不应该是仅限于Windows 10的问题,而是适用于Windows 7+和提升的权限。

也许您可以使用配置参数来设置X:路径并在运行时加载,或者尝试使用UNC路径,在运行时解析并且不需要映射驱动器。

\\ServerNameOrIP\A Folder\a_file.txt.

在代码中,您需要:
System.IO.File.Exists("\\\\ServerName\\A Folder\\a_file.txt");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接