C# 添加Windows服務,定時任務。

  源碼下載地址:http://files.cnblogs.com/files/lanyubaicl/20160830Windows%E6%9C%8D%E5%8A%A1.zip編輯器

 

步驟 一 、 建立服務項目。ide

 

步驟二 、添加安裝程序。this

 步驟三 、服務屬性設置 【serviceInstaller1】。spa

 

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 設置服務啓動方式爲自動啓動code

    [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)
        {

        }
    }

步驟5、腳本配置。component

安裝服務腳本orm

%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  中止或啓動服務的代碼blog

    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

相關文章
相關標籤/搜索