Windows服務 開機自動運行

1.新建windows服務項目:

在VSIDE中點擊新建項目中VC#下--windows中--windows服務--改變項目命名,選中項目路徑--確定。

2.介紹文件構成:

創建後項目中會自動帶有Program.cs和Service1.cs,Service1是沒有圖形化界面的,這是因爲windows服務基本都是沒有界面的,系統運行後就加載的這些服務程序,系統啓動時便開始運行,不需要用戶登錄,windows服務需要安裝並在註冊表中進行註冊。

點擊Service1界面右鍵“查看代碼”或點擊“單擊此處切換到代碼視圖”,代碼中會出現2個重要的方法,一個 protected override void OnStart(string[] args){}方法,用於處理windows服務啓動後將運行的程序。一個 protected override void OnStop(){}方法,用於處理windows服務停止後將運行的程序。

3.編寫windows服務程序

下面我們就來編寫一個windows服務,當開啓這個服務時,將在C盤下記錄系統運行時間和操作信息,當結束服務時,記錄結束的時間。

代碼如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.IO;

namespace Windows
{
    public partial class Service1 : ServiceBase
    {

        public Service1()
        {
            InitializeComponent();
        }
        int compuTime;
        //啓動時執行
        protected override void OnStart(string[] args)
        {
            FileStream fs = new FileStream(@"C:/Log.txt", FileMode.OpenOrCreate, FileAccess.Write);
            StreamWriter sw = new StreamWriter(fs);
            sw.BaseStream.Seek(0, SeekOrigin.End);
            sw.WriteLine("開始時間:" + DateTime.Now.ToString());


            compuTime = Environment.TickCount;

            long curTickValue = Environment.TickCount;
            long difference = curTickValue - compuTime;

            long computerHours, computerMinutes, computerSeconds;
            long applicationHours, applicationMinutes, applicationSeconds;


            computerHours = (curTickValue / (3600 * 999)) % 24;
            computerMinutes = (curTickValue / (60 * 999)) % 60;
            computerSeconds = (curTickValue / 999) % 60;

            applicationHours = (difference / (3600 * 999)) % 24;
            applicationMinutes = (difference / (60 * 999)) % 60;
            applicationSeconds = (difference / 999) % 60;

            sw.WriteLine(String.Format("本計算機已運行了 {0} 小時 {1} 分 {2} 秒", computerHours.ToString(), computerMinutes.ToString(), computerSeconds.ToString()));


            sw.WriteLine(String.Format("本應用程序已運行了 {0} 小時 {1} 分 {2} 秒",
           applicationHours.ToString(), applicationMinutes.ToString(),
           applicationSeconds.ToString()));

            sw.WriteLine("機器名稱:" + Environment.MachineName);
            sw.WriteLine("系統版本:" + Environment.OSVersion);
            sw.WriteLine("系統路徑:" + Environment.SystemDirectory);
            sw.WriteLine("系統用戶名:" + Environment.UserName);
            sw.WriteLine("系統.Net版本:" + Environment.Version);


            sw.Flush();
            fs.Close();

        }
        //停止

        protected override void OnStop()
        {
            FileStream fs = new FileStream(@"c:/Log.txt", FileMode.OpenOrCreate, FileAccess.Write);
            StreamWriter sw = new StreamWriter(fs);
            sw.BaseStream.Seek(10, SeekOrigin.End);
            sw.WriteLine("結束時間:" + DateTime.Now.ToString());
            sw.WriteLine("************************************");
            sw.Flush();
            sw.Close();

        }
    }


}

4.添加安裝程序

在Service1視圖界面點擊右鍵“添加安裝程序”,將會生成兩個組件,分別設置安裝組件的屬性。

serviceProcessInstaller1組件修改一個屬性

Account屬性改爲:LocalSystem

serviceInstaller1組件修改三個屬性

Description屬性可以填寫描述windows服務的內容,如我的windows服務;

DisplayName 屬性填寫windows服務的服務名稱 如MywindowsService;

StartType屬性改爲Automatic;//手工對服務進行操作

5.生成項目

生成項目調試錯誤,直至提示生成成功,到項目所在的文件夾下確認以及生成exe可執行文件,如我的項目創建在D:/msd0902練習/WindowsService1/bin/Debug下,以及成功生成了WindowsService1.exe。

6.在系統中安裝windows服務。

在開始菜單打開.Net Framework SDK或VS Tools中的命令行程序將出現黑屏下的命令行語句,在VC>後寫下installutill命令,然後打空格,再寫上你的windows服務的生成目錄及“/”和windows服務的執行命令的文件名,最後按回車鍵。

如 installutil "D:/msd0902練習/WindowsService1/bin/Debug/WindowsService1.exe"

提示成功後,及表示註冊成功。

7.開啓服務,查看程序運行效果。

在控制面板-- 管理工具--- 服務中找到windows服務的服務名稱如MywindowsService,右鍵啓動服務,啓動後,可以到C盤下找到Log.txt文件,如果你沒有找到,說明你前面的過程有錯誤,請重新進行一遍。

打開文件後,執行的效果是:

本計算機已運行了 1 小時 16 分 44 秒
本應用程序已運行了 0 小時 0 分 0 秒
機器名稱:977D914A3540495
系統版本:Microsoft Windows NT 5.1.2600 Service Pack 3
系統路徑:C:/WINDOWS/system32
系統用戶名:LOCAL SERVICE
系統.Net版本:2.0.50727.1433

8. 停止服務,查看程序運行效果

在服務中找到windows服務的服務名稱如MywindowsService,右鍵停止服務,停止後,查看c盤下Log.txt文件,打開文件後,執行的效果是:

本計算機已運行了 1 小時 16 分 44 秒
本應用程序已運行了 0 小時 0 分 0 秒
機器名稱:977D914A3540495
系統版本:Microsoft Windows NT 5.1.2600 Service Pack 3
系統路徑:C:/WINDOWS/system32
系統用戶名:LOCAL SERVICE
系統.Net版本:2.0.50727.1433
結束時間:2009-6-26 14:14:53

*********************************

9.卸載windows服務

無用的windows服務,我們應該停止服務,以免佔內存,現在將我們的windows服務在開始菜單打開.Net Framework SDK或VS Tools中的命令行程序將出現黑屏下的命令行語句,在VC>後打入installutil "D:/msd0902練習/WindowsService1/bin/Debug/WindowsService1.exe" /u 然後按回車鍵,提示卸載成功,我們的windows服務就成功卸載了。

10.修改windows服務

對已經生成過的windows服務代碼進行修改時,首先要停止此windows服務,然後修改代碼後,重新生成即可,如提示“…exe…正在使用”說明你的windows服務沒有停止進程,確保停止重新再生成。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章