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

2 c# file-permissions windows-services

我在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");
Run Code Online (Sandbox Code Playgroud)

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

(编辑)我已经跟踪和调试项目启用-跟踪输出文件创建,它只是空的.

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

这看起来像另一个问题的症状,但我也得到了问题LocalSystem(我认为有太多的权限所以被弃用).

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

谢谢你的帮助

bob*_*mcr 5

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

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