如何在Windows服务中执行代码?

4
我被要求开发一个C# Windows服务。然而,我习惯于创建具有用户输入的GUI界面。
由于Windows服务是自动化的,因此我想知道代码如何执行。
我的意思是,我如何控制流程?
能否有人澄清一下?我没有找到关于Windows服务的很多信息...

我只是在询问有什么不同的做法。 - user1789769
看起来是一个副本 https://dev59.com/rkjSa4cB1Zd3GeqPFnYP,其中提到了很多资源。 - Shan Plourde
3个回答

2

Windows服务从OnStart开始执行,通常情况下,例如定时器,重复的执行从这里开始。当服务停止时,将调用OnStop方法。此文章可能是一个很好的起点。

protected override void OnStart(string[] args)
  {
    base.OnStart(args);

    //TODO: place your start code here
  }

  protected override void OnStop()
  {
    base.OnStop();

    //TODO: clean up any variables and stop any threads
  }

Adil:你知道Windows服务是否会执行系统调用吗?对我来说它不起作用(使用本地系统帐户启动服务)。 - frhd

2
代码在 OnStart() 中启动。
protected override void OnStart(string[] args)
{
    // Equivalent of Main()
    // Run threads here before timeout so OS knows it has started
}

通常情况下,您会从另一个函数启动线程,以便OnStart()可以返回并启动服务。

OnStopOnShutdown也是一样的,您可以在这里清理所有内容。


通常你有30秒的时间来运行 OnStart 等函数,否则你的进程将会被终止。 - lc.

0
protected override void OnStart(string[] args)
    {
        try
        {
            timer.AutoReset = true;
            timer.Enabled = true;
            timer.Start();

            serviceThread = new Thread(new ThreadStart(Delete));
            clientCleanupThread = new Thread(new ThreadStart(removeExpirery));
            enableAutoSubscribeProduct = new Thread(new ThreadStart(Products));

            serviceThread.Start();
            clientCleanupThread.Start();


            enableAutoSubscribeProduct.Start();


        }
        catch (Exception ex)
        {

            Log.Error("Error on thread start " + ex.Message);
        }
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接