如何使用System.IO.DirectoryInfo访问映射的网络驱动器?
时间:2020-03-06 14:43:24 来源:igfitidea点击:
我需要在映射的网络驱动器上创建目录。我正在使用代码:
DirectoryInfo targetDirectory = new DirectoryInfo(path); if (targetDirectory != null) { targetDirectory.Create(); }
如果我指定类似" \\ ServerName \ Directory"的路径,则一切正常。如果我将" \ ServerName \ Directory"映射为,例如驱动器Z :,并指定类似" Z:\"的路径,则它将失败。
创建targetDirectory对象之后,VS(在调试模式下)显示targetDirectory.Exists = false,并尝试执行targetDirectory.Create()会引发异常:
System.IO.DirectoryNotFoundException: "Could not find a part of the path 'Z:\'."
但是,相同的代码在本地目录下也能很好地工作,例如C:。
该应用程序是Windows服务(WinXP Pro,SP2,.NET 2),与映射驱动器的用户使用相同的帐户运行。 Qwinsta答复用户会话是会话0,因此它与服务会话相同。
解决方案
我们可以尝试使用WNetConnection将映射的驱动器解析为网络路径。
我们是否使用与程序运行时完全相同的凭据进行映射?
映射的网络驱动器是特定于用户的,因此,如果应用程序以与创建映射驱动器号(z :)的用户不同的身份运行,它将无法正常工作。
应用程序所运行的帐户可能无权访问映射的驱动器。如果这是一个Web应用程序,那肯定是问题所在……默认情况下,一个Web应用程序以NETWORK SERVICE帐户运行,该帐户没有任何映射的驱动器设置。尝试使用模拟来解决问题。尽管我们可能需要找出一个更好的解决方案,然后才使用模拟。如果是我,我会坚持使用UNC路径。
我们在Vista / Server 2k8上运行吗?这两个服务都将服务隔离到会话0中,而第一个交互式会话是会话1. 这里有关于会话隔离的更多信息。因此,即使服务和交互式登录使用的是同一用户,也将是不同的会话。