我在我的Windows服务中使用Directory.Exists()
(在C#,3.5框架中编程)来检查驱动器中是否存在特定目录。当我在本地机器上运行它工作正常,这意味着我能够访问该目录。
但是当我在虚拟机上部署Windows服务并启动该服务时,即使该目录存在,也无法找到该目录。目录映射为
Q: drive, Q:\\temp\\local\\ folder
但是对于Directory.Exists(),Windows服务总是返回false。
但是,当我使用C:\ drive
代替Q:\
时,它可以正常工作,但不适用于映射驱动器。我已尝试使用UNC路径,并确保映射驱动器具有管理权限,实际上具有读取,写入和执行权限。但它仍然是假的。
任何人都可以告诉我为什么?以及如何解决?
答案 0 :(得分:5)
确保驱动器映射在与服务正在运行的用户相同的位置。如果您将驱动器映射为用户A,则它也不会自动映射到其他任何人。
答案 1 :(得分:4)
答案 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)
排除故障的步骤
- 尝试在&#34;运行&#34;中手动访问网络路径[WindowKey + R]
- 尝试访问您的地图驱动器,例如:M:\
- 确保您是映射的帐户所有者(映射应在您的帐户下完成)
- 转到“房产”,查看是否&#34;以管理员身份运行&#34;未经检查。
- 删除映射并重新添加映射。
- 确保关闭可用离线(或脱机同步)并从另一台计算机上获取文件夹。
醇>
希望这有帮助!