【问题标题】:.NET 4, writing a windows service for logging and directory monitoring.NET 4,编写用于日志记录和目录监控的 Windows 服务
【发布时间】:2011-04-08 23:22:43
【问题描述】:

我已经编写了一个作为 windows 控制台应用程序的软件;有一个配置文件指定如何登录该部分。

现在我已经对其进行了测试并且工作正常,我想将其转换为 Windows 服务。我创建了一个新项目,但有两个问题:

1) 日志记录似乎不再发生;不再读取配置文件,或者由于某些其他原因(权限?)而无法进行日志记录。无论如何,我在想什么是记录 Windows 服务的最佳方式,也许是通过 Windows 事件日志记录?如何?还是让我的配置文件工作更好,这样我就可以在不重新编译的情况下禁用日志记录?

2) 在服务中,我使用一组 FileSystemWatcher 对象来监视目录。看起来在服务中我不再收到监控事件了。有什么提示吗?

谢谢

编辑: 第 2 点向前迈进了一步 - 调试后我发现我收到了事件,问题是如果我尝试使用 File.Move 移动文件并且它失败了。

edit2: 第 2 点向前迈出了一小步) - 我必须使用用户权限安装服务,否则它不会让我移动文件。这解决了。

【问题讨论】:

  • 您的日志文件存储在哪里?是的,Windows 服务在不同的权限模型下运行。如果没有有关您的配置的具体信息,这很难诊断。
  • 你的意思是输出文件?它应该放在服务 exe 所在的同一个目录中(编译后,但可能在服务安装期间它被移动到其他地方)。

标签: .net logging windows-services


【解决方案1】:

您的帖子中有不止一个问题。

您看不到日志的一个可能原因可能是您看错了地方。服务以当前工作目录作为 %systemroot%\system32 启动,因此它会尝试在那里创建日志。

【讨论】:

  • 是的,但日志不存在。我怀疑它甚至没有读取配置文件。
  • 找出它是否正在尝试写入日志的一种快速方法是启动进程监视器 (technet.microsoft.com/en-us/sysinternals/bb896645) 并查看文件系统操作。如果服务作为网络服务运行或使用非管理员用户帐户运行,将无法在 system32 目录中创建文件。
  • 除此之外,如果你的服务进程是32位,操作系统是64位,你还可以检查%systemroot%\Syswow64。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-13
  • 1970-01-01
  • 1970-01-01
  • 2022-09-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多