zoukankan      html  css  js  c++  java
  • 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.NETFrameworkv4.0.30319installutil.exe WindowsServiceTest.exe
    Net Start ServiceTest
    sc config ServiceTest start= auto

    卸载服务脚本

    %SystemRoot%Microsoft.NETFrameworkv4.0.30319installutil.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.NETFrameworkv4.0.30319installutil.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.NETFrameworkv4.0.30319installutil.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 SettingsAdministrator.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

  • 相关阅读:
    Scrum Works 1.84安装
    使用Sandcastle Styles 来生成VS2008的帮助文档.
    NDoc 用户指南(转)
    第一章 C#语言基础(C# Language Elements)
    SQL Server 2005 中删除重复记录
    SDE 远程连接
    C# 按钮美化技巧
    SOP 中的 Service
    C# DateTime赋值为null
    C# WebBrowser显示html字符串
  • 原文地址:https://www.cnblogs.com/Alex80/p/6321862.html
Copyright © 2011-2022 走看看