TopShelf-服务已启动,但无济于事

问题描述 投票:0回答:1

我已经编写了一个简单的代码,应该使用topshelf自动开始。问题是,如果我从Visual Studio中运行它,或者只是单击exe文件上的debug文件夹,它就会启动,没有任何问题。

这是我的代码

using System;
using System.Collections.Generic;
using Topshelf;
using System.IO;

namespace ConsoleCRP
{    
    public class Program
    {
        public static void Main(){
                var rc = HostFactory.Run(x =>{
                    x.Service<ClientReportingScheduler>(s =>                                   
                    {
                        s.ConstructUsing(name => new ClientReportingScheduler());                                    
                        s.WhenStarted(tc => tc.Start());                         
                        s.WhenStopped(tc => tc.Stop());                          
                    });
                    x.StartAutomatically();
                    x.RunAsLocalSystem();                                       

                    x.SetDescription("This is automatic scheduler");                  
                    x.SetDisplayName("scheduler");                                  
                    x.SetServiceName("servicetest");                                  
                });                                                             

                var exitCode = (int)Convert.ChangeType(rc, rc.GetTypeCode());  
                Environment.ExitCode = exitCode;
            }
        }
    public class ClientReportingScheduler
        {
            public System.Timers.Timer _timer;
            public int startJob = 0;

            public ClientReportingScheduler()
            {
                startJob = 1000 * 5 ;

                _timer = new System.Timers.Timer(startJob) { AutoReset = true };
                _timer.Elapsed += (sender, eventArgs) =>
                {
                    Console.WriteLine("Starting scheduler query check at {0}" + Environment.NewLine, DateTime.Now);     
                };
            }

            public void Start()
            {
                _timer.Start();
            }
            public void Stop()
            {
                _timer.Stop();
            }
    }

}

我确实从topshelf文档中复制了示例,对该代码仅做了一些小的更改。我只在此处粘贴了此版本的简短版本(只是为了向您展示问题)。在完整版中,我也使用fluentscheduler,并且有很多代码可以连接到postgress,获取一些数据并执行一些存储过程,但这不是问题。问题在于,即使您在上面看到的这个小代码也根本无法使用。如果您启动新的控制台应用程序并将其粘贴到其中(现在可以从nuget添加topshelf),则可以立即创建此程序。如果启动它,它应该可以工作,但是如果将其作为服务安装,则根本不起作用...

以下是我作为服务安装时执行的步骤:1)以管理员身份打开CMD2)进入目录进行调试3)以这种方式安装:ConsoleCRP.exe安装4)启动服务:net start servicetest5)如果要停止服务:net stop servicetest6)如果要卸载:ConsoleCRP.exe卸载

以下是结果:配置结果:[成功]名称服务测试[成功] DisplayName调度程序[成功]说明这是自动调度程序[成功] ServiceName servicetestTopshelf v4.2.1.215,.NET Framework v4.0.30319.42000servicetest服务现在正在运行,请按Control + C退出。在08/10/2019 16:31:12启动调度程序查询检查]

在08/10/2019 16:31:17启动调度程序查询检查

在08/10/2019 16:31:22启动调度程序查询检查

在08/10/2019 16:31:27启动调度程序查询检查

所以,请告诉我,该代码有什么问题,因为它不能作为服务使用???在此先感谢您的帮助!

我已经编写了一个简单的代码,应该使用topshelf自动开始。问题是,如果我从Visual Studio中运行它,或者只是单击调试文件夹上的...

c# windows service topshelf
1个回答
0
投票

我发现了问题...有两个问题。首先,当这是服务时,它将完全不会打开控制台应用程序,如果您想查看任何内容,则必须将其编写,即写入txt文件...

第二(在我的整个项目中)是我使用自己的记录器编写所有内容,该记录器使用AppDomain.CurrentDomain.BaseDirectory编写文件...看来这是不允许的,因为这是很繁琐的,您必须编写登录其他地方。

© www.soinside.com 2019 - 2024. All rights reserved.