【问题标题】:FileSystemWatcher.Path Exception for Network Shared Drive网络共享驱动器的 FileSystemWatcher.Path 异常
【发布时间】:2017-10-14 01:10:05
【问题描述】:

我使用 FileSystemWatcher 对象从文件夹中检索文件。

该代码适用于本地机器驱动器/文件夹,但当我使用网络路径时会引发异常。

由于某种原因,如果我在调试模式下启动服务,代码不会引发异常。如果我通过 installutil 安装它,则会再次引发此异常。 也许有一些权限问题,但我不知道是什么......

public LevelOneValidatedWatcher(string strLevelOneFolder)
{
    FileSystemWatcher objFSW = new FileSystemWatcher();
    objFSW.Path = strLevelOneFolder; /// <<<<<<<<<<<<    EXCEPTION THROWN HERE
    objFSW.Filter = "*.zip";
    objFSW.Created += new FileSystemEventHandler(myWatcher_Created);
    objFSW.Renamed += new RenamedEventHandler(mydWatcher_Renamed);
    objFSW.EnableRaisingEvents = true;
}

System.ArgumentException was unhandled
Message=The directory name T:\INFORMATION TECHNOLOGY\bu is invalid.
Source=System
StackTrace:
at System.IO.FileSystemWatcher.set_Path(String value)
at MA.BatchTool.ServerLibrary.LevelOneValidatedWatcher..ctor(String strLevelOneFolder) in D:\Dev\Projects\MailAssurety1.1\Development\SourceCode\MA_1.1\WebServerSide\WebServerLibraries\LevelOneValidatedWatacher.cs:line 23
at MA.BatchTool.ServerLibrary.ServerJobProcessor.StartFileWatcher(Object strPath) in D:\Dev\Projects\MailAssurety1.1\Development\SourceCode\MA_1.1\WebServerSide\WebServerLibraries\ServerJobProcessor.cs:line 32
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart(Object obj)

【问题讨论】:

  • 根据异常消息,路径不存在。请确保您使用的路径正确。
  • 您好,路径存在。它是一个共享驱动器。当我在调试模式下启动我的 Visual Studio 时,该程序可以访问该路径。将该服务安装为 Windows 服务后,发生异常。
  • 检查 herehere 这些可能会对您有所帮助。
  • 网络路径是什么样的?您可以尝试使用 \\?\ 或 @\\ 或 $
  • @Vinod:是的,我可以使用 UNC,但前提是我将登录从本地系统帐户更改为我自己的帐户。但是在这种情况下,映射驱动器“T:\”的使用仍然被阻止。

标签: c# .net filesystemwatcher mapped-drive


【解决方案1】:

驱动器号映射是一个交互式登录设置。例外是告诉您事实,T:\INFORMATION TECHNOLOGY\bu 确实不存在,因为对于您自己的会话以外的会话(例如服务运行的会话 0),驱动器 T:\ 不会在任何地方映射。它在调试时起作用的原因是,当您调试时,您很可能在自己的会话中而不是在会话 0 中运行服务。

当您尝试从从 UAC 提示符启动的程序中访问映射驱动器时会发生类似的问题,因为 UAC 用户被视为“不同的用户”。

可能的进一步阅读可能的解决方法“Map a network drive to be used by a service

【讨论】:

  • 谢谢这对我有意义。
【解决方案2】:

我认为Local System Account 无法访问共享驱动器,您必须将 Windows 服务配置为以特定用户身份运行


【讨论】:

  • 是的,我这样做是为了使用 UNC
猜你喜欢
  • 1970-01-01
  • 2019-12-26
  • 1970-01-01
  • 2018-01-24
  • 2022-10-05
  • 2013-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多