6

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

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

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

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

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

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

4

5 回答 5

6

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

于 2013-09-05T09:13:46.687 回答
4

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

映射要由服务使用的网络驱动器

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

于 2013-09-05T09:22:10.790 回答
1

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

例如(对于映射和 UNC,以防发生某些事情):

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

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

于 2014-01-13T00:41:54.063 回答
1

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

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

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

更新

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

于 2013-09-05T09:13:55.620 回答
0

故障排除步骤

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

希望这可以帮助!

于 2018-03-14T14:41:58.137 回答