【问题标题】:Directory.exists returns false for mapped drive in c# codingDirectory.exists 在 c# 编码中为映射驱动器返回 false
【发布时间】:2013-09-09 01:03:12
【问题描述】:

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

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

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

但 Windows 服务总是为 Directory.Exists() 返回 false。

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

谁能告诉我为什么?以及如何解决?

【问题讨论】:

    标签: c# directory


    【解决方案1】:

    确保驱动器在服务运行时映射到同一用户下。如果您将驱动器映射为用户 A,它也不会自动映射给其他任何人。

    【讨论】:

    • 我同意,不同的用户有不同的映射,所以运行windows服务的用户可能没有这个映射,你试过用你登录的用户配置服务吗?
    【解决方案2】:

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

    Map a network drive to be used by a service

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

    【讨论】:

    • 我使用了完整的 UNC 路径 - \\servername\fnsw\tmp\126。但它也从不识别路径。它说目录不存在。
    【解决方案3】:

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

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

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

    更新

    想起来了; 尝试将应用程序池的身份更改为与您的用户具有相同权限的用户。

    【讨论】:

      【解决方案4】:

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

      例如(对于映射和 UNC,以防万一那里发生了什么事):

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

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

      【讨论】:

        【解决方案5】:

        故障排除步骤

        1. 尝试在“运行”中手动访问网络路径[WindowKey + R]
        2. 尝试访问您的地图驱动器,即:M:\
        3. 确保您是映射的帐户所有者(映射应在您的帐户下完成)
        4. 转到属性,查看“以管理员身份运行”是否未选中。
        5. 删除映射并重新添加映射。
        6. 确保已关闭离线可用(或离线同步)且文件夹可从另一台计算机使用。

        希望这会有所帮助!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-04-05
          • 2017-03-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-10-03
          • 1970-01-01
          相关资源
          最近更新 更多