我创建了一个名为 ProxyMonitor 的Windows服务,目前服务已安装并且卸载顺利。
现在我这样执行应用程序:
C:\\Windows\\Vendor\\ProxyMonitor.exe /install
非常容易理解,我接着到了 services.msc
并开始服务,但是当我这么做时,我收到以下消息:
本地计算机上的代理监视器服务已启动,然后停止。如果没有工作可做,某些服务会自动停止,例如性能日志和警报服务。
我的代码如下:
public static Main(string[] Args)
{
if (System.Environment.UserInteractive)
{
/*
* Here I have my install logic
*/
}
else
{
ServiceBase.Run(new ProxyMonitor());
}
}
然后在ProxyMonitor类中,我有:
public ProxyMonitor()
{
}
protected override void OnStart(string[] args)
{
base.OnStart(args);
ProxyEventLog.WriteEntry("ProxyMonitor Started");
running = true;
while (running)
{
//Execution Loop
}
}
在 onStop()
中,我只是将 running
变量更改为 false
;
我需要做什么才能使服务始终处于活动状态?因为我需要监视网络并跟踪更改等。
更新:1
protected override void OnStart(string[] args)
{
base.OnStart(args);
ProxyEventLog.WriteEntry("ProxyMonitor Started");
Thread = new Thread(ThreadWorker);
Thread.Start();
}
在 ThreadWorker
中,我有一个 ProxyEventLogger.WriteEntry("Main thread entered")
,但它没有触发。
_shutdownEvent.Set()
和_shutdownEvent.Reset()
无效。 - My-Name-Is_shutdownEvent.Set()
,线程将停止执行。这是因为WorkerThreadFunc()
中的while循环将退出。如果您想暂停并稍后恢复同一线程,请创建另一个ManualResetEvent
对象来控制线程的这个方面。 - Matt Davis