【问题标题】:Windows service rights to write in log file写入日志文件的 Windows 服务权限
【发布时间】:2011-11-23 11:04:23
【问题描述】:

我使用 C# 创建了一个 Windows 服务,该服务在 C:\ProgramData 中写入日志(使用 NLog)。
当我调试服务(在我的 Windows 7 上)(使用上面编写的代码)时,正确创建了日志文件并正确写入了日志记录。 但是当我在运行 Windows server 2008 (x86) 的服务器上安装该服务时,没有创建日志文件(我还签入了 C:\Windows\System32\,那里什么也没有)。

我怀疑这是一个授权问题,那么我怎么知道我的服务正在使用什么权限?

PS:我已经使用具有管理员权限的命令行C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe C:\PathToMyService\MyService.exe 安装了我的服务。

【问题讨论】:

  • 权限将是您的服务运行的任何身份,而不是用于安装它的身份。详情见这里:stackoverflow.com/questions/858597/…
  • C:\windows\system32 不应用于写入日志文件。这是一个重要的操作系统目录。另外 C:\ProgramData 我们是应用程序二进制文件,不应用于日志文件。您应该将应用程序服务的日志文件写入 C:\AppData\local\... 或 Windows 2008 服务器上的 Windows 事件日志。如果您这样做,除了这是一种很好的做法外,您的权限问题也会更少。

标签: c# windows-services nlog


【解决方案1】:

您应该在 Windows 控制面板 fpr services 中看到您的服务。在上下文菜单中,您可以看到运行您的服务的用户。您甚至可以更改在那里运行您的服务的用户。

您必须授予该用户在您的日志目录中写入的权限。

【讨论】:

    【解决方案2】:

    运行services.msc,找到你的服务右键选择Properties。检查Log On 标签以查看您的服务在哪个帐户下运行。

    至于您的问题,默认情况下,我认为大多数服务都在Local System Account 下运行,我认为它有权写入C:\ProgramData 目录。您是否确定 nlog.config 文件已与您的服务一起部署?

    【讨论】:

    • Arg,只是发现我的服务没有部署 nlog.config 文件。固定!
    • @Leito - 你的问题听起来太熟悉了...发生在我身上好几次了!
    • 如何确保 NLog.config 文件与服务一起部署? “总是复制到输出文件夹”还不够吗?
    • 很好的答案。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-04
    • 1970-01-01
    • 2013-09-12
    • 2015-08-02
    • 2013-03-19
    • 2010-10-25
    相关资源
    最近更新 更多