C# Windows 服务创建跟踪文件但从不写入它

标签 c# windows-services file-permissions

我有一个使用 VS 2010 中的“new ... c# service”菜单创建的 Windows 服务。在构造函数中我有:

TextWriterTraceListener tr1 = new TextWriterTraceListener( System.IO.File.CreateText("d:\\output\\test.log"));
Trace.Listeners.Add(tr1);
Trace.WriteLine("Created");

将服务设置为在 LocalService 或 LocalSystem 帐户 (WinXP) 中运行 我在服务启动时创建了文件,但它始终为空。向析构函数添加 Flush() 调用没有帮助。我在 OnStart/OnStop/OnPause/OnContinue 方法中有更多跟踪调用。

(编辑)我在项目中启用了跟踪和调试 - 正在创建跟踪输出文件,它只是空的。

该服务将从数据库中提取记录并将文件写入磁盘,以便我们必须与之交互的消息系统。因此,日志文件问题只是更广泛问题的第一个实例 - 我需要能够写入用户选择的消息目录。

这看起来像 another question 中的症状但我也遇到了 LocalSystem 的问题(我认为它有太多权限,因此已被弃用)。

  1. 我的跟踪调用做错了什么? (为什么创建了文件但没有写入任何内容?)
  2. 如果我希望我的服务在 LocalService 帐户中运行,是否有某种方法可以让安装程序授予其写入文件夹/子树的权限?
  3. 或者我应该将服务作为 LocalSystem 运行吗?
  4. [Debug.Launch/EnsureWriter][2] 的重新实现是一个合理的解决方案吗?我更倾向于说“为什么 writer 为空”,而不是从其他地方粘贴代码。

感谢您的帮助

最佳答案

您确定已为您的项目定义了 TRACE 符号吗?所有System.Diagnostics.Trace代码是根据此符号有条件编译的。请注意,您仍然需要刷新跟踪输出以确保写入所有行(或者将 Trace.AutoFlush 设置为 true)。

作为旁注,我建议不要使用静态 Trace 方法,并建议至少使用 System.Diagnostics.TraceSource .

关于C# Windows 服务创建跟踪文件但从不写入它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5228829/

相关文章:

c++ - 在 windows7 上从 windows 服务执行 Notepad.exe 问题

windows - 如何运行多个SVN服务

linux - 在 Linux 中删除文件所需的最小文件权限

c - 获取基本文件权限以与 C 中的输入进行比较

c# - 使用 C# 运行 shell 命令并将信息获取到字符串中

c# - 在 C# 中允许用户定义的字符串

c# - 在 UWP 中将 Entity Framework 与 SQL Server 结合使用

c# - 如何从 C# XML 注释中引用构造函数?

c# - Windows 服务的全局异常处理程序?

windows - 在Labview 2012、Windows 7操作系统中,如何验证用户写权限?