C# Windows服务在生产PC上不执行任何操作

C# Windows服务在生产PC上不执行任何操作,c#,windows-services,quartz.net,production,C#,Windows Services,Quartz.net,Production,我有一个使用Quartz.Net调度作业的应用程序。它作为winforms应用程序(带有启动和停止按钮)和Windows服务(其OnStart()和OnStop()事件代码与winforms应用程序的启动和停止按钮代码匹配)在我的开发笔记本电脑上都能完美地工作。它们都在同一个解决方案中,使用相同的“模型”代码(在它自己的项目中) 如果我在生产计算机上运行winforms应用程序,它将正常工作,作业将按照预期的时间表执行。但是,如果我将其作为Windows服务安装并运行在生产PC上,则不会发生任何

我有一个使用Quartz.Net调度作业的应用程序。它作为winforms应用程序(带有启动和停止按钮)和Windows服务(其
OnStart()
OnStop()
事件代码与winforms应用程序的启动和停止按钮代码匹配)在我的开发笔记本电脑上都能完美地工作。它们都在同一个解决方案中,使用相同的“模型”代码(在它自己的项目中)

如果我在生产计算机上运行winforms应用程序,它将正常工作,作业将按照预期的时间表执行。但是,如果我将其作为Windows服务安装并运行在生产PC上,则不会发生任何事情!作业不运行

我不知道如何调试这个。如果您对可能出现的问题有任何建议,请告诉我

另外,请让我知道我应该提供什么其他信息

哦-开发电脑运行的是Windows7,生产电脑运行的是Windows8.1!这可能是问题所在吗?我按照本教程构建了该服务:这并不表示部署到Windows 8需要做任何特殊的工作

这是否与环境变量有关(我对此一无所知)

以下是一些可能相关的代码:

服务:

namespace DataPump
{
    public partial class DataPumpService : ServiceBase
    { 

        private TaskManager _taskManager;

        public DataPumpService()
        {
            InitializeComponent();
            _taskManager = new TaskManager();
        }

        protected override void OnStart(string[] args)
        {
            _taskManager.Go();
        }

        protected override void OnStop()
        {
            _taskManager.Stop();
        }
    }
}
表格代码(不同项目):

TaskManager
code中选择的代码(前两个分别引用的第三个项目):

其中
JobList
是一个
get
唯一的属性,它生成一个
List
其中
DatapumpJob
实现
IInterrutableJob
,但添加了一个常见的特性,包括一个作业名,该作业名由从
Make…
开始的三个方法使用,这三个方法都是
TaskManager
class


此代码用于回答有关
ServiceBase.Run()
的注释中的问题:

Program.cs(自动生成):

名称空间数据泵
{
静态类程序
{
/// 
///应用程序的主要入口点。
/// 
静态void Main()
{
ServiceBase[]ServicesToRun;
ServicesToRun=新的ServiceBase[]
{ 
新的数据泵服务()
};
ServiceBase.Run(ServicesToRun);
}
}

}

这是一个网络权限问题。服务正在运行,只是无法访问网络驱动器。所以我的问题确实是具体的


尝试后:我们最终将服务设置为在PC上以特定用户帐户运行,从而使其正常工作。

应用程序中的代码在部署为服务时是否使用UI控件?使用UI控件的服务可能恰好在一台计算机上运行,但不能保证运行。我最近使用了该教程,所以我们相信它是正确的。此示例将事件写入事件日志。如果您将它们留在(放回)中,那么您应该能够从日志中记录服务的状态。Quartz计划程序需要在服务的生命周期内处于活动状态(在范围内)。您在哪里声明和实例化服务中的计划程序?如果您向我们展示您的一些代码,这会有所帮助。@user469104否使用UI stuff的代码是一个独立于实际计划和作业类的项目,第三个项目包含该服务。因此,当您以交互方式运行服务程序集时,服务程序集不应该与winforms内容有任何关系(我不认为),您使用的是运行服务的同一帐户吗?换句话说,服务帐户是否具有执行其工作所需的访问权限?
namespace DataPump
{
    public partial class Form1 : Form
    {
        private TaskManager _taskManager = new TaskManager();

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            _taskManager.Go(); //Loops infinitely, does not block
            label1.Text = "Running...";
        }

        private void button2_Click(object sender, EventArgs e)
        {
            label1.Text = "Stopping...";
            _taskManager.Stop();
            label1.Text = "Idle";
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            _taskManager.Stop();
        }
    }
}
public class TaskManager
{
    //...
    private IScheduler _scheduler = StdSchedulerFactory.GetDefaultScheduler();
    //...

    public void Go()
    {
        if (_scheduler.GetCurrentlyExecutingJobs().Count() == 0)
        {
            _scheduler.Start();
            _scheduler.AddCalendar(CalendarName, MakeSAPublicHolidayCalendar(), false, true);

            foreach (DatapumpJob job in JobList)
            {
                _scheduler.ScheduleJob(MakeJob(job), MakeTriggerCron(job));
            }
        }
    }

    //...

    public void Stop()
    {
        foreach (string name in _scheduler.GetCurrentlyExecutingJobs().Select(j => j.JobDetail.Key.Name))
        {
            _scheduler.Interrupt(new JobKey(name));
        }
        _scheduler.Shutdown(true);
    }
    //...
}
namespace DataPump
{
    static class Program
    {
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    static void Main()
    {
        ServiceBase[] ServicesToRun;
        ServicesToRun = new ServiceBase[] 
        { 
            new DataPumpService() 
        };
        ServiceBase.Run(ServicesToRun);
    }
}