C# 添加Windows服务,定时任务。

源码下载地址:http://files.cnblogs.com/files/lanyubaicl/20160830Windows%E6%9C%8D%E5%8A%A1.zip

步骤 一 、 创建服务项目。

步骤二 、添加安装程序。

 步骤三 、服务属性设置 【serviceInstaller1】。

4.1 添加定时任务

 public partial class SapSyn : ServiceBase
    {
        System.Timers.Timer timer1;  //计时器
        System.Timers.Timer timer2;  //计时器
        System.Timers.Timer timer3;  //计时器
        System.Timers.Timer timer4;  //计时器
        public SapSyn()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {

            timer1 = new System.Timers.Timer();
            timer1.Interval = 8000;  //设置计时器事件间隔执行时间
            timer1.Elapsed += new System.Timers.ElapsedEventHandler(TMStart1_Elapsed);
            timer1.Enabled = true;

            timer2 = new System.Timers.Timer();
            timer2.Interval = 8000;  //设置计时器事件间隔执行时间
            timer2.Elapsed += new System.Timers.ElapsedEventHandler(TMStart2_Elapsed);
            timer2.Enabled = true;

            timer3 = new System.Timers.Timer();
            timer3.Interval = 8000;  //设置计时器事件间隔执行时间
            timer3.Elapsed += new System.Timers.ElapsedEventHandler(TMStart3_Elapsed);
            timer3.Enabled = true;

            timer4 = new System.Timers.Timer();
            timer4.Interval = 8000;  //设置计时器事件间隔执行时间
            timer4.Elapsed += new System.Timers.ElapsedEventHandler(TMStart4_Elapsed);
            timer4.Enabled = true;

        }

        protected override void OnStop()  //服务停止执行
        {
            using (System.IO.StreamWriter sw = new System.IO.StreamWriter("C:\\log.txt", true))
            {
                sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ") + "Stop.");
            }
            this.timer1.Enabled = false;
            this.timer2.Enabled = false;
            this.timer3.Enabled = false;
            this.timer4.Enabled = false;
        }

        protected override void OnPause()
        {
            //服务暂停执行代码
            base.OnPause();
        }
        protected override void OnContinue()
        {
            //服务恢复执行代码
            base.OnContinue();
        }
        protected override void OnShutdown()
        {
            //系统即将关闭执行代码
            base.OnShutdown();
        }

        private void TMStart1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            //执行SQL语句或其他操作
            using (System.IO.StreamWriter sw = new System.IO.StreamWriter("C:\\" + 1 + "log.txt", true))
            {
                sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ") + "Start.");
            }
        }
        private void TMStart2_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            //执行SQL语句或其他操作
            using (System.IO.StreamWriter sw = new System.IO.StreamWriter("C:\\" + 2 + "log.txt", true))
            {
                sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ") + "Start.");
            }
        }
        private void TMStart3_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            //执行SQL语句或其他操作
            using (System.IO.StreamWriter sw = new System.IO.StreamWriter("C:\\" + 3 + "log.txt", true))
            {
                sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ") + "Start.");
            }
        }

        private void TMStart4_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            //执行SQL语句或其他操作
            using (System.IO.StreamWriter sw = new System.IO.StreamWriter("C:\\" + 4 + "log.txt", true))
            {
                sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ") + "Start.");
            }
        }

    }

4.2 设置服务启动方式为自动启动

    [RunInstaller(true)]
    public partial class ProjectInstaller : System.Configuration.Install.Installer
    {
        public ProjectInstaller()
        {
            InitializeComponent();
            this.Committed += new InstallEventHandler(ProjectInstaller_Committed);
        }
        private void ProjectInstaller_Committed(object sender, InstallEventArgs e)
        {
            //参数为服务的名字
            System.ServiceProcess.ServiceController controller = new System.ServiceProcess.ServiceController("ServiceSapSyn");
            controller.Start();
        }
        private void serviceInstaller1_AfterInstall(object sender, InstallEventArgs e)
        {

        }
    }

步骤五、脚本配置。

安装服务脚本

%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe WindowsServiceTest.exe
Net Start ServiceTest
sc config ServiceTest start= auto

卸载服务脚本

%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe /u WindowsServiceTest.exe

5.1  停止或启动服务的代码

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        public string thispath = Application.StartupPath;
        public string Propath = "";
        private void Form1_Load(object sender, EventArgs e)
        {
            this.Text = "启动服务";
        }

        /// <summary>
        /// 启动服务
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            Cursor = Cursors.WaitCursor;
            string StarPath = @"%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe " + Propath;

            FileStream fs = new FileStream(thispath + "\\Install.bat", FileMode.Create);
            StreamWriter sw = new StreamWriter(fs);
            try
            {
                sw.WriteLine(StarPath);
                sw.WriteLine("Net Start ServiceTest");
                sw.WriteLine("sc config ServiceTest start= auto");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message.ToString());
            }
            finally
            {
                sw.Close();
                fs.Close();
            }
            System.Diagnostics.Process.Start(thispath + "\\Install.bat");
            this.Text = "启动服务:你选择的服务已经启动。";
            Cursor = Cursors.Default;
        }

        /// <summary>
        /// 停止服务
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button2_Click(object sender, EventArgs e)
        {
            Cursor = Cursors.WaitCursor;

            string StarPath = @"%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe /u " + Propath;

            FileStream fs = new FileStream(thispath + "\\Uninstall.bat", FileMode.Create);
            StreamWriter sw = new StreamWriter(fs);
            try
            {
                sw.WriteLine(StarPath);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message.ToString());
            }
            finally
            {
                sw.Close();
                fs.Close();
            }
            System.Diagnostics.Process.Start(thispath + "\\Uninstall.bat");
            this.Text = "启动服务:你选择的服务已经卸载。";
            Cursor = Cursors.Default;
        }

        private void button3_Click(object sender, EventArgs e)
        {
            ///选择文件框 对象
            OpenFileDialog ofd = new OpenFileDialog();
            //打开时指定默认路径
            ofd.InitialDirectory = @"C:\Documents and Settings\Administrator.ICBCOA-6E96E6BE\桌面";
            //如果用户点击确定
            if (ofd.ShowDialog() == DialogResult.OK)
            {
                //将用户选择的文件路径 显示 在文本框中
                textBox1.Text = ofd.FileName;
                Propath = textBox1.Text;
            }
            if (File.Exists(thispath + "\\Uninstall.bat"))
            {
                File.Delete(thispath + "\\Uninstall.bat");
            }
            File.Create(thispath + "\\Uninstall.bat").Close();
            if (File.Exists(thispath + "\\Install.bat"))
            {
                File.Delete(thispath + "\\Install.bat");
            }
            File.Create(thispath + "\\Install.bat").Close();
        }

        //读写文本 - 写入数据按钮
        private void buttonWrite_Click(string filePath)
        { 

        }

        /// <summary>
        /// 运行CMD命令
        /// </summary>
        /// <param name="cmd">命令</param>
        /// <returns></returns>
        public static string Cmd(string[] cmd)
        {
            Process p = new Process();
            p.StartInfo.FileName = "cmd.exe";
            p.StartInfo.UseShellExecute = false;
            p.StartInfo.RedirectStandardInput = true;
            p.StartInfo.RedirectStandardOutput = true;
            p.StartInfo.RedirectStandardError = true;
            p.StartInfo.CreateNoWindow = true;
            p.Start();
            p.StandardInput.AutoFlush = true;
            for (int i = 0; i < cmd.Length; i++)
            {
                p.StandardInput.WriteLine(cmd[i].ToString());
            }
            p.StandardInput.WriteLine("exit");
            string strRst = p.StandardOutput.ReadToEnd();
            p.WaitForExit();
            p.Close();
            return strRst;
        }

        /// <summary>
        /// 关闭进程
        /// </summary>
        /// <param name="ProcName">进程名称</param>
        /// <returns></returns>
        public static bool CloseProcess(string ProcName)
        {
            bool result = false;
            System.Collections.ArrayList procList = new System.Collections.ArrayList();
            string tempName = "";
            int begpos;
            int endpos;
            foreach (System.Diagnostics.Process thisProc in System.Diagnostics.Process.GetProcesses())
            {
                tempName = thisProc.ToString();
                begpos = tempName.IndexOf("(") + 1;
                endpos = tempName.IndexOf(")");
                tempName = tempName.Substring(begpos, endpos - begpos);
                procList.Add(tempName);
                if (tempName == ProcName)
                {
                    if (!thisProc.CloseMainWindow())
                        thisProc.Kill(); // 当发送关闭窗口命令无效时强行结束进程
                    result = true;
                }
            }
            return result;
        }

    }

5.2 Form1.Designer.cs 代码

    partial class Form1
    {
        /// <summary>
        /// 必需的设计器变量。 Form1.Designer.cs
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// 清理所有正在使用的资源。
        /// </summary>
        /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Windows 窗体设计器生成的代码

        /// <summary>
        /// 设计器支持所需的方法 - 不要
        /// 使用代码编辑器修改此方法的内容。
        /// </summary>
        private void InitializeComponent()
        {
            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));
            this.button1 = new System.Windows.Forms.Button();
            this.button2 = new System.Windows.Forms.Button();
            this.textBox1 = new System.Windows.Forms.TextBox();
            this.button3 = new System.Windows.Forms.Button();
            this.SuspendLayout();
            //
            // button1
            //
            this.button1.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
            this.button1.Location = new System.Drawing.Point(12, 90);
            this.button1.Name = "button1";
            this.button1.Size = new System.Drawing.Size(134, 60);
            this.button1.TabIndex = 0;
            this.button1.Text = "启动服务";
            this.button1.UseVisualStyleBackColor = true;
            this.button1.Click += new System.EventHandler(this.button1_Click);
            //
            // button2
            //
            this.button2.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
            this.button2.Location = new System.Drawing.Point(280, 90);
            this.button2.Name = "button2";
            this.button2.Size = new System.Drawing.Size(134, 60);
            this.button2.TabIndex = 0;
            this.button2.Text = "停止服务";
            this.button2.UseVisualStyleBackColor = true;
            this.button2.Click += new System.EventHandler(this.button2_Click);
            //
            // textBox1
            //
            this.textBox1.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
            this.textBox1.ForeColor = System.Drawing.Color.Maroon;
            this.textBox1.Location = new System.Drawing.Point(108, 13);
            this.textBox1.Multiline = true;
            this.textBox1.Name = "textBox1";
            this.textBox1.Size = new System.Drawing.Size(306, 67);
            this.textBox1.TabIndex = 2;
            //
            // button3
            //
            this.button3.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Underline, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
            this.button3.ForeColor = System.Drawing.Color.Blue;
            this.button3.Location = new System.Drawing.Point(12, 12);
            this.button3.Name = "button3";
            this.button3.Size = new System.Drawing.Size(90, 68);
            this.button3.TabIndex = 3;
            this.button3.Text = "请选择服务路径";
            this.button3.UseVisualStyleBackColor = true;
            this.button3.Click += new System.EventHandler(this.button3_Click);
            //
            // Form1
            //
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(419, 155);
            this.Controls.Add(this.button3);
            this.Controls.Add(this.textBox1);
            this.Controls.Add(this.button2);
            this.Controls.Add(this.button1);
            this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
            this.Name = "Form1";
            this.Text = "选择服务程序";
            this.Load += new System.EventHandler(this.Form1_Load);
            this.ResumeLayout(false);
            this.PerformLayout();

        }

        #endregion

        private System.Windows.Forms.Button button1;
        private System.Windows.Forms.Button button2;
        private System.Windows.Forms.TextBox textBox1;
        private System.Windows.Forms.Button button3;
    }

源码下载地址:http://files.cnblogs.com/files/lanyubaicl/20160830Windows%E6%9C%8D%E5%8A%A1.zip

时间: 2024-10-06 05:50:45

C# 添加Windows服务,定时任务。的相关文章

可视化Windows服务定时任务

思路:1.新建一个<Windows服务项目>,在里面建服务文件(可以多个),用来做要执行的任务. 2.新建一个<Windows窗体应用程序>,在这个程序里管理服务.如:安装.卸载.启动.停止. 示例(定时写日志): 1.新建解决方案,如图: 2.LogService里新建2个服务文件: 3.打开服务文件,右键: 4.设置属性: 5.在服务文件的OnStart事件里写要执行的任务. 6.在应用程序里对服务进行控制. 7.注意:把服务的文件copy到应用程序中. 最后:附上源码:

Jboss添加Windows服务,同时定期重启

一.添加成Windows服务 进入目录 \wildfly-9.0.2s - All\bin\service\ 编辑 service.bat,修改一下参数 set SHORTNAME=SAMEXAppServer  --服务名 set DISPLAYNAME="SAMEXAppServer" set DESCRIPTION="SAMEX Wildfly Application Server" SET JAVA_HOME=D:\Java\jdk1.7.0_51 右击 w

windows服务+定时任务(quartz.net)+nancy

需求一:软件要能在操作系统启动后,自动运行因为操作系统是windows 10,所以最先想到的是windows服务,因为windows服务有个自动启动选项,设为true就行了..net做这个最合适了,可以建windows服务项目. 需求二:包含N个任务,要求每天.每周.每月都可以执行,时间可自己设置面对这个需求,很明显Timer不适合了,最先想到的便是Quartz.net,因为这个东西之前也用过,所以就用它了.满足需求绰绰有余.有一点需要说明的是,具体时间是保存在数据库里面的,服务在从数据库读取到

windows服务定时任务

public partial class TimerByThread : ServiceBase { public TimerByThread() { InitializeComponent(); } ThreadStart ts = new ThreadStart(WriteLog.WriteLogToD); Thread thread; protected override void OnStart(string[] args) { try { thread = new Thread(ts)

安装winform程序时自动安装windows服务

项目中遇到一个需求:安装winform程序时自动安装windows服务,且windows服务运行时反过来检测winform程序是否启动.如果没有则启动. 经过一番查阅已在win10下实现并运行正常.在此记录便于以后查看 实现思路:利用打包插件VS installer 有一个自定义操作,可以指定安装完成后运行的程序集,并在程序集中默认启动一个windows服务安装类 实现步骤:1.在winform程序所在解决方案中,添加一个vs installer打包项目, vs installer的使用不再累述

C#创建windows服务搭配定时器Timer使用实例(用代码做,截图版)

功能说明:C#创建一个windows服务,服务启动时D:\mcWindowsService.txt写入数据,服务运行期间每隔两秒写入当前时间.      原理这些就不说了,三语两语说不清楚,直接贴一个实例.不能贴图片!!那个压缩文里面是word文档!!有图有真相 1.建立空白项目 2.添加创建windows服务需要的引用,选择System.ServiceProcess.   3.创建服务类,继承ServiceBase,类的源代码在后面. 4. 添加windows服务的安装类. (1)在类名或者解

C# 使用vs2013 写 windows服务

第一步:添加windows服务项目 并起一个 好看的名字 第二步:添加安装程序 第三步:右键点击serviceProcessInstaller1属性,在Account中选择LocalSystem 第四步:右键点击serviceInstaller1 属性,在serviceName修改自己服务需要的名称 第五步:点击ServerTest选择查看代码 OnStart 是服务启动时 会运行的 启动方法  我们一般会用一个线程去定义 OnStop 是 服务停止时 会运行的方法,一般写一些 资源回收的方法

webform调用windows服务

准备工作: 0.电脑->管理->本地用户和组->组->Administrator双击->隶属->添加Network service->确定 1.启动windows服务Windows Installer 2.创建winform项目 WindowsFormsApplication1 3.添加windows服务 service1 4.添加代码 protected override void OnStart(string[] args) { if (args != nul

使用普通Windows服务创建Quartz.Net服务项目

使用普通Windows服务创建Quartz.Net服务项目 首先创建Quartz.Net.2.0解决方案,添加 Windows服务 项目,添加安装程序,修改服务运行账户类型为LocalSystem(默认为User) 添加C5.dll.Common.Logging.dll.Common.Logging.Log4Net.dll.log4net.dll.Quartz.dll引用 C5.dll 一个C#和其他CLI语言的泛型集合类..Net2.0及以上才可以使用.简介地址:http://www.itu.