我想从Windows服务编写错误日志。我知道从windows服务调用一个customcommand,但它不允许任何参数。我想将我的错误消息传递给服务,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");
如何将字符串值传递给服务?
答案 0 :(得分:-1)
因为您的服务在与您的应用程序不同的域中运行。因此,您的应用中的ATELib.AteBAC.getErrorMessage
与您服务中的ATELib.AteBAC.getErrorMessage
不同。
老实说,如果你不得不做这样的事情,你的应用程序设计就会遇到问题。这项服务真的可以不断地做点什么。或者,它可以“睡眠”并收听TCP端口。收到信号后,它就可以找到工作并执行。当然,在进入不必要的复杂性之前先考虑设计。