【发布时间】:2013-12-05 04:41:21
【问题描述】:
我想从 Windows 服务写入错误日志。我知道从 Windows 服务调用自定义命令,但它不允许任何参数。我想将我的错误消息传递给服务,customcommand 将写入日志。我该怎么做。我尝试了一些东西
我在我的库类中创建了一个静态字符串变量。 每当发生错误时,我都会调用类似
的函数
ATELib.AteBAC.getErrorMessage = "error message from client";
ServiceController Controller = new ServiceController("ATELogsService");
if (Controller.Status == ServiceControllerStatus.Running)
{
Controller.ExecuteCommand(128);
}
我服务中的代码是
protected override void OnCustomCommand(int command)
{
if (command == 128)
{
using (System.IO.StreamWriter file = new System.IO.StreamWriter(Application.StartupPath + @"\ATELogCheck.txt", true))
{
file.WriteLine(ATELib.AteBAC.getErrorMessage);
ATELib.AteBAC.getErrorMessage = null;
}
}
}
它正在创建错误日志文件(ATELogCheck.txt),但文件中没有错误消息(字符串值),创建了一个空的 txt 文件。它是一个静态变量,即使它是空的。我正在使用 tcp 协议并将服务对象称为
baCls = (ATELib.AteBAC)Activator.GetObject(typeof(ATELib.AteBAC), "tcp://localhost:9090/ATE");
如何将字符串值传递给服务?
【问题讨论】:
-
在库中创建静态变量不会自动使该变量(及其值)可用于引用该库的各种进程。您的服务和客户端之间的
ATELib.AteBAC.getErrorMessage变量不一样。您需要某种形式的 IPC 来发送此字符串。 -
我会让你的事情复杂一点。我们在 windows 服务上使用了 ETW 侦听器,然后客户端可以生成 ETW 自定义事件并将它们发送到 windows 服务。 msdn.microsoft.com/en-us/library/ms751538(v=vs.110).aspx
标签: c# windows-services error-logging