Directory.exists在c#编码中为映射驱动器返回false

时间:2013-09-05 09:08:14

标签: c# directory

我在我的Windows服务中使用Directory.Exists()(在C#,3.5框架中编程)来检查驱动器中是否存在特定目录。当我在本地机器上运行它工作正常,这意味着我能够访问该目录。

但是当我在虚拟机上部署Windows服务并启动该服务时,即使该目录存在,也无法找到该目录。目录映射为

 Q: drive, Q:\\temp\\local\\ folder 

但是对于Directory.Exists(),Windows服务总是返回false。

但是,当我使用C:\ drive代替Q:\时,它可以正常工作,但不适用于映射驱动器。我已尝试使用UNC路径,并确保映射驱动器具有管理权限,实际上具有读取,写入和执行权限。但它仍然是假的。

任何人都可以告诉我为什么?以及如何解决?

5 个答案:

答案 0 :(得分:5)

确保驱动器映射在与服务正在运行的用户相同的位置。如果您将驱动器映射为用户A,则它也不会自动映射到其他任何人。

答案 1 :(得分:4)

映射驱动器仅在交互式登录期间恢复,服务通常不会执行:

Map a network drive to be used by a service

简短版本:你不能这样做,改为使用完整的UNC路径。

答案 2 :(得分:1)

这很可能是特权问题。您的Windows服务可能在没有足够权限访问网络路径的帐户下运行。

这可能是重复:Accessing mapped folder from a Windows Service written in C#

另一种可能的解决方案是使用模拟,检查出来: http://msdn.microsoft.com/en-us/library/w070t6ka(v=vs.90).aspx

<强>更新

想到了它; 尝试将应用程序池的标识更改为具有与用户相同权限的用户。

答案 3 :(得分:1)

正如@Sriram所指出的,如果发生任何错误,Directory.Exists()方法将失败。如果您尝试访问路径,会得到什么样的例外?

例如(对于映射和UNC,如果有事情发生的话):

DirectoryInfo diMapped = new DirectoryInfo(@"Q:\temp\local\folder");
DirectoryInfo diUNC = new DirectoryInfo(@"\\servername\fnsw\tmp\126");

注意:假设路径中“文件夹”之前的空格是拼写错误?

答案 4 :(得分:0)

排除故障的步骤

  
      
  1. 尝试在&#34;运行&#34;中手动访问网络路径[WindowKey + R]
  2.   
  3. 尝试访问您的地图驱动器,例如:M:\
  4.   
  5. 确保您是映射的帐户所有者(映射应在您的帐户下完成)
  6.   
  7. 转到“房产”,查看是否&#34;以管理员身份运行&#34;未经检查。
  8.   
  9. 删除映射并重新添加映射。
  10.   
  11. 确保关闭可用离线(或脱机同步)并从另一台计算机上获取文件夹。
  12.   

希望这有帮助!