【问题标题】:Windows Service works when testing but not as ServiceWindows 服务在测试时有效,但不能作为服务
【发布时间】:2010-09-21 20:03:13
【问题描述】:

我创建了一个 Windows 服务,它使用 FileSystemWatcher 监视目录,当文件放入文件夹时,它会压缩它。

所有功能都在我创建的名为 FileProcessor 的类中。

当我创建一个使用 FileProcessor 的控制台应用程序时,自动压缩效果很好。但是,当我在 Windows 服务中运行该类时,它永远不会工作。

【问题讨论】:

  • 您是否尝试过调试您的服务? “它永远行不通”有点模糊。 IIRC,将 Debugger.Break() 行放在正确的位置对 Debug 版本来说是一种享受。
  • 我同意 spender 的观点,我可以确认 FileSystemWatcher 在具有本地管理员权限(并查看本地目录)的帐户上运行时,在服务中运行良好。

标签: c# windows-services filesystemwatcher


【解决方案1】:

在我看来,文件权限可能会搞砸你。服务在哪个帐户下运行?

【讨论】:

    【解决方案2】:

    检查运行您的服务的帐户和目录 - 它是否具有目标目录的权限和可见性?

    向该类添加一些诊断,以便您可以看到它正在尝试做什么,并输出错误信息(您正在处理FileSystemWatcher 下的任何可能的操作系统错误,对吗?)。当服务上线时,您无论如何都需要这些。比较作为服务运行和测试时的输出。

    System.Threading.Thread.Sleep(15000) 添加到您的类中,以便在您的服务调用它时,您有时间附加调试器以了解发生了什么。

    【讨论】:

    • +1 用于旧的 Thread.Sleep([many seconds]) 技巧。更好的是,一旦你解决了问题,你就释放了那个混蛋,再也没有时间把它拿出来!
    • @Andras Zoltan - 通常我只将它用于调试构建以防止尴尬
    • 或者,您可以让它执行Debugger.Break (msdn.microsoft.com/en-us/library/…),它会提示您附加到它。您还需要确保它可以与桌面交互。
    • @Steve Townsend - 是的,这里也一样;只是在我最早的服务中的大约 3 次这样结束之后......
    【解决方案3】:

    尝试像花费者所说的那样调试您的服务 - 运行服务。在代码中放置一个调试点以进行检查。在 Visual Studio 中按 Ctrl + Alt + P 这将为您提供附加过程屏幕。

    签入 - 在所有用户中显示进程并在所有会话中显示进程 - 复选框。 尝试在 - 可用进程列表中找到您的服务 然后点击“附加”

    现在在文件夹中放一个文件,调试器会在断点处将你带到 VS 并尝试调试它,我相信你会发现问题所在。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多