2011-09-23 90 views
2

我使用C#创建了一个Windows服务,该服务在C:\ProgramData中写入日志(使用NLog)。
当我调试服务(在我的Windows 7上)(使用上面写的代码)时,日志文件被正确创建并正确写入日志记录。 但是,当我在我的服务器上安装Windows服务器2008上运行的服务(x86)时,没有创建日志文件(我也检查了C:\Windows\System32\,没有任何内容)。在日志文件中写入Windows服务权限

我怀疑这是一个授权问题,所以我怎么知道我的服务使用哪些权限?

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

+1

权利将是您的服务运行的任何身份,而不是用于安装它的身份。详情请看这里:http://stackoverflow.com/questions/858597/why-wont-my-windows-service-write-to-my-log-file –

+0

C:\ windows \ system32不应该被用来写日志文件到。这是一个重要的操作系统目录。另外C:\ ProgramData我们是应用程序二进制文件驻留,不应该用于日志文件。您应该将应用程序服务的日志文件写入C:\ AppData \ local \ ...或Windows 2008服务器上的Windows事件日志。如果你这样做的话,你的权限问题也会减少,除此之外,这也是很好的做法。 –

回答

5

运行services.msc,找到您的服务请点击右键并选择Properties。检查Log On选项卡以查看您的服务在哪个帐户下运行。

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

+1

Arg,刚才发现nlog.config文件没有与我的服务一起部署。固定! – Otiel

+0

@Leito - 你的问题听起来很熟悉......发生在我身上好几次! – James

+0

如何确保NLog.config文件与服务一起部署?是否“总是复制到输出文件夹”足够? –

1

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

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