在Windows服务中需要帮助

时间:2012-01-31 19:26:43

标签: c# windows-services

我写了一个Windows服务但是当我安装它时我发现它不起作用。我不知道是什么问题!

此服务将一些文件从一个地方移动到另一个地方!

我需要帮助

感谢

    public partial class Service1 : ServiceBase
    {


        public Service1()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {
        }
        protected override void OnContinue()
        {
            const string SrcPath = "d:\\Source";
            const string DisPath = "d:\\Dist\\";
            if (Directory.Exists(SrcPath))
            {
                string[] files = Directory.GetFiles(SrcPath);
                for (int i = 0; i < files.Length; i++)
                {
                    Console.WriteLine(files[i]);
                    string[] list = files[i].Split('\\');
                    if (!File.Exists(DisPath + list[list.Length - 1]))
                    {
                        File.Move(files[i], DisPath + list[list.Length - 1]);
                    }
                }
            }
        }
        protected override void OnStop()
        {
        }
}

3 个答案:

答案 0 :(得分:2)

那是因为你在OnStart()方法中没有做任何事情。你需要拥有你想要的逻辑。从SCM触发“继续”命令时会触发OnContinue()

ServiceBase.OnStart() Method Reference

答案 1 :(得分:1)

只是为了补充Shark说的话,我猜你不希望这只是做一次工作然后实际上已经死了。所以你需要有某种机制来定期确定是否需要完成工作,然后再做工作,然后等一下再重复。

否则,我建议您只看一下将批处理脚本放在Windows任务调度程序上。

答案 2 :(得分:0)

您必须在OnStart

中添加内容
   System.Timers.Timer timer = new System.Timers.Timer();

        protected override void OnStart(string[] args)
        {
            timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
            timer.Enabled = true;
            timer.Interval = AppSettings.PeriodOfQuering;
        }

        void timer_Elapsed(object sender, ElapsedEventArgs e)
        {
            DoJob();
        }