程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 教學思路WinForms之 windows服務

教學思路WinForms之 windows服務

編輯:關於C語言

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盤下記錄系統運行時間和操作信息,當結束服務時,記錄結束的時間。 代碼如下:    1 using System;
 2 using System.Collections.Generic;
 3 using System.ComponentModel;
 4 using System.Data;
 5 using System.Diagnostics;//進程的命名空間
 6 using System.Linq;
 7 using System.ServiceProcess;
 8 using System.Text;
 9 using System.IO;//引入文件流的命名空間
10 
11 namespace WindowsService1
12 {
13     public partial class Service1 : ServiceBase
14     {
15         public Service1()
16         {
17             InitializeComponent();
18         }
19     
20 
21         int compuTime;
22         //啟動時執行
23         protected override void OnStart(string[] args)
24         {
25             FileStream fs = new FileStream(@"c:\Log.Txt",FileMode.OpenOrCreate,FileAccess.Write);
26             StreamWriter sw = new StreamWriter(fs);
27             sw.BaseStream.Seek(0, SeekOrigin.End);
28             sw.WriteLine("開始時間:" + DateTime.Now.ToString());
29 
30 
31             compuTime = Environment.TickCount;
32 
33             long curTickValue = Environment.TickCount;
34             long difference = curTickValue - compuTime;
35 
36             long computerHours, computerMinutes, computerSeconds;
37             long applicationHours, applicationMinutes, applicationSeconds;
38 
39          
40             computerHours = (curTickValue / (3600 * 999)) % 24;
41             computerMinutes = (curTickValue / (60 * 999)) % 60;
42             computerSeconds = (curTickValue / 999) % 60;
43 
44             applicationHours = (difference / (3600 * 999)) % 24;
45             applicationMinutes = (difference / (60 * 999)) % 60;
46             applicationSeconds = (difference / 999) % 60;
47 
48             sw.WriteLine (String.Format("本計算機已運行了 {0} 小時 {1} 分 {2} 秒", computerHours.ToString(), computerMinutes.ToString(),computerSeconds.ToString()));
49 
50 
51             sw.WriteLine (String.Format("本應用程序已運行了 {0} 小時 {1} 分 {2} 秒",
52             applicationHours.ToString(), applicationMinutes.ToString(),
53             applicationSeconds.ToString()));
54 
55             sw.WriteLine("機器名稱:" + Environment.MachineName);
56             sw.WriteLine("系統版本:" + Environment.OSVersion);
57             sw.WriteLine("系統路徑:" + Environment.SystemDirectory);
58             sw.WriteLine("系統用戶名:" + Environment.UserName);
59             sw.WriteLine("系統.Net版本:" + Environment.Version);
60             
61 
62             sw.Flush();
63             fs.Close();
64         }
65 
66         //停止
67         protected override void OnStop()
68         {
69             FileStream fs = new FileStream(@"c:\Log.Txt", FileMode.OpenOrCreate, FileAccess.Write);
70             StreamWriter sw = new StreamWriter(fs);
71             sw.BaseStream.Seek(10,SeekOrigin.End);
72             sw.WriteLine("結束時間:" + DateTime.Now.ToString());
73             sw.WriteLine("************************************");
74             sw.Flush();
75             sw.Close();
76         }
77     }
78 }
79      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服務沒有停止進程,確保停止重新再生成。

本文出自 “葉子文文” 博客,轉載請與作者聯系!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved