.net Win服务作为控制台应用程序工作,但不作为Windows服务

.net Win服务作为控制台应用程序工作,但不作为Windows服务,.net,windows-services,topshelf,ssms-2017,.net,Windows Services,Topshelf,Ssms 2017,我使用Topshelf4.2.1创建了一个控制台应用程序服务。像使用windows服务一样使用它。 我正在使用Dapper获取数据并更新Microsoft SQL Server,我从app.config获取连接字符串以及(文件夹路径、文件夹限制)中的常量 控制台应用程序工作得很完美,但当我作为服务安装时,它会启动,但不会执行任何操作 enter code here class Program { static void Main(string[] args) {

我使用Topshelf4.2.1创建了一个控制台应用程序服务。像使用windows服务一样使用它。 我正在使用Dapper获取数据并更新Microsoft SQL Server,我从app.config获取连接字符串以及(文件夹路径、文件夹限制)中的常量 控制台应用程序工作得很完美,但当我作为服务安装时,它会启动,但不会执行任何操作

enter code here class Program
{
    static void Main(string[] args)
    {
        var exitCode = HostFactory.Run(x =>
        {
            x.Service<EmailMonitoring>(s =>
            {
                s.ConstructUsing(emailMonitoring => new EmailMonitoring());
                s.WhenStarted(emailMonitoring => emailMonitoring.Start());
                s.WhenStopped(emailMonitoring => emailMonitoring.Stop());
            });
            x.RunAsLocalSystem();
      

            x.SetServiceName("EmailMonitoring");
            x.SetDisplayName("Email Monitoring");
            x.SetDescription("Description");

        });

        int exitCodeValue = (int)Convert.ChangeType(exitCode, exitCode.GetTypeCode());
        Environment.ExitCode = exitCodeValue;
    }
}


enter code here private readonly Timer _timer;

    public EmailMonitoring()
    {
        _timer = new Timer(1000 * int.Parse(Helper.AppSetVal("intervalSeconds"))) { AutoReset = false };
        // when testing, use smaller interval and autoreset = false like example below
       // _timer = new Timer( 1000  ) { AutoReset = false };
        _timer.Elapsed += TimerElapsed;
    } 

    private void TimerElapsed(object sender, ElapsedEventArgs e)
    {
        ServiceHelper.ProcessNewRecords();
    }

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

    public void Stop()
    {
        _timer.Stop();
    }
在这里输入代码类程序
{
静态void Main(字符串[]参数)
{
var exitCode=HostFactory.Run(x=>
{
x、 服务(s=>
{
s、 ConstructUsing(emailMonitoring=>new emailMonitoring());
s、 开始时(emailMonitoring=>emailMonitoring.Start());
s、 停止时(emailMonitoring=>emailMonitoring.Stop());
});
x、 RunAsLocalSystem();
x、 SetServiceName(“EmailMonitoring”);
x、 SetDisplayName(“电子邮件监控”);
x、 设定说明(“说明”);
});
int-exitCodeValue=(int)Convert.ChangeType(exitCode,exitCode.GetTypeCode());
Environment.ExitCode=exitdevalue;
}
}
在此处输入代码专用只读计时器\u Timer;
公共电子邮件监测()
{
_计时器=新计时器(1000*int.Parse(Helper.AppSetVal(“intervalSeconds”)){AutoReset=false};
//测试时,使用较小的间隔,并且autoreset=false,如下面的示例所示
//_timer=new timer(1000){AutoReset=false};
_timer.appeased+=timerecursed;
} 
私有void timerecursed(对象发送方,ElapsedEventArgs e)
{
ServiceHelper.ProcessNewRecords();
}
公开作废开始()
{
_timer.Start();
}
公共停车场()
{
_timer.Stop();
}

已解决:在Microsoft Server SQL中,将NT AUTHORITY\SYSTEM的登录属性设置为sysadmin