【发布时间】:2011-07-10 20:57:16
【问题描述】:
我在 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 方法中有更多跟踪调用。
(edit) 我在项目中启用了跟踪和调试 - 正在创建跟踪输出文件 ,它只是空的。
该服务将从数据库中提取记录并将文件写入磁盘,以便我们必须与之交互的消息传递系统。所以日志文件问题只是更广泛问题的第一个实例——我需要能够写入用户选择的消息传递目录。
这看起来像 another question 中的症状,但我也遇到了 LocalSystem 的问题(我认为它有太多的权限,所以被弃用了)。
- 我在跟踪调用时做错了什么? (为什么创建了文件但没有写入文件?)
- 如果我希望我的服务在 LocalService 帐户中运行,是否有某种方法可以让安装程序授予它写入文件夹/子树的权限?
- 还是应该将服务作为 LocalSystem 运行?
- 重新实现 [Debug.Launch/EnsureWriter][2] 是一个合理的解决方案吗?我更倾向于说“为什么作者为空”,而不是从其他地方粘贴代码。
感谢您的帮助
【问题讨论】:
标签: c# windows-services file-permissions