Visual Studio.net 2010 Windows Service 开发,安装与调试
???? 本示例完成一個每隔一分鐘向C:\log.txt文件寫入一條記錄為例,講述一個Windows Service 程序的開發(fā),安裝與調(diào)試
??? 原程序,加文檔示例下載
????/Files/zycblog/SourceCode.rar
??? 目錄索引
??? 1? 開發(fā)工具
??? 2??開發(fā)過程?
??? 3? 安裝
??? 4? 開發(fā)調(diào)試
????5? 注意事項
??? 6? 參考資料
1.??????????? 開發(fā)工具
1.1?? Visual Stuo.net 2010
1.2?? Windows 7
?
2.??????????? 開發(fā)過程
2.2?? 打開Visual Studio.net 2010 ,在C# 下邊新建Windows Service 程序,命名為FileOperation,保存在D:\study\目錄下邊,如下圖所示
?
2.3?? 點擊OK以后,展示出新建的項目如下圖所示
?
2.4 其中Program.cs 文件里的程序如下
?
代碼 using?System;using?System.Collections.Generic;
using?System.Linq;
using?System.ServiceProcess;
using?System.Text;
namespace?FileOperation
{
????static?class?Program
????{
????????///?<summary>
????????///?The?main?entry?point?for?the?application.
????????///?</summary>
????????static?void?Main()
????????{
????????????ServiceBase[]?ServicesToRun;
????????????ServicesToRun?=?new?ServiceBase[]?
????????????{?
????????????????new?Service1()?
????????????};
????????????ServiceBase.Run(ServicesToRun);
????????}
????}
}
整個Service程序?qū)倪@里開始
默認情況下,VS會為你新建一個名為Service1的服務程序,右擊Service1.cs然后選擇View Code,打開服務程序的代碼窗,程序如下
?
代碼 using?System;using?System.Collections.Generic;
using?System.ComponentModel;
using?System.Data;
using?System.Diagnostics;
using?System.Linq;
using?System.ServiceProcess;
using?System.Text;
namespace?FileOperation
{
????public?partial?class?Service1?:?ServiceBase
????{
????????public?Service1()
????????{
????????????InitializeComponent();
????????}
????????protected?override?void?OnStart(string[]?args)
????????{
????????}
????????protected?override?void?OnStop()
????????{
????????}
????}
}
?
?
其中OnStart(),OnStop() 根據(jù)你的需要寫入你在Service程序開始和停止的時候要干什么
?
2.5 既是要定時往C盤根目錄去新建一個文件夾,那就需要一個Timer,并且告知他一分鐘執(zhí)行一次,加上Timer以后代碼如下
?
代碼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.Timers;
namespace?FileOperation
{
????public?partial?class?Service1?:?ServiceBase
????{
????????private?readonly?Timer?_MyTimer;
????????public?Service1()
????????{
????????????InitializeComponent();
????????????_MyTimer?=?new?Timer(1?*?60?*?1000);?//單位為分鐘
????????????_MyTimer.Elapsed?+=?_MyTimerElapsed;
????????}
????????protected?override?void?OnStart(string[]?args)
????????{
?????????????_MyTimer.Start();
????????}
????????protected?override?void?OnStop()
????????{
????????????_MyTimer.Stop();
????????}
????????internal?void?_MyTimerElapsed(object?sender,?ElapsedEventArgs?e)
????????{
????????????try
????????????{
????????????????//添加往C盤新建文本文件的程序
????????????}
????????????catch?(Exception?ex)
????????????{?}
????????}
????}
}
?
注意引用 : using System.Timers;
??????????? ???只要在internal void _MyTimerElapsed(object sender, ElapsedEventArgs e)?方法中添加你的程序即可
2.6?? 既是要文件操作,首先需要添加相關命名空間的引用,以方便你的代碼編寫
完了以后你的程序如下
?
代碼 ?internal?void?_MyTimerElapsed(object?sender,?ElapsedEventArgs?e)????????{
????????????try
????????????{
????????????????//添加往C盤新建一個文本文件的程序
????????????????try
????????????????{
????????????????????string?logFileName?=?@"C:\\log.txt";?//?文件路徑
????????????????????FileInfo?fileinfo?=?new?FileInfo(logFileName);
????????????????????using?(FileStream?fs?=?fileinfo.OpenWrite())
????????????????????{
????????????????????????StreamWriter?sw?=?new?StreamWriter(fs);
????????????????????????sw.WriteLine("=====================================");
????????????????????????sw.Write("添加日期為:"?+?DateTime.Now.ToString()?+?"\r\n");
????????????????????????sw.WriteLine("=====================================");
????????????????????????sw.Flush();
????????????????????????sw.Close();
????????????????????}
????????????????}
????????????????catch?(Exception?ex)
????????????????{
????????????????????//??ex.ToString();
????????????????}
????????????}
????????????catch?(Exception?ex)
????????????{?}
????????}
?
?
2.7?? 接下來就程序的安裝與調(diào)試,看以上新建目錄程序是否正常
?
3.??????????? 安裝
1.1?? 右擊Service1 選擇?View Desinger 打開設計視圖,右擊設計視圖的空白處選擇add Installer ,會為你新建ProjectInstaller.cs安裝項目文件,打開剛剛新建的ProjectInstaller.cs的設計視圖,單擊serviceInstaller1,在屬性窗口,將ServiceNmae 設置為FileOperation ,StartType 屬性設置為Automatic表示系統(tǒng)啟動后自動運行服務程序如下圖所示,將serviceProcessInstaller1 的Account屬性設置為LocalService
?
?
3.1?? 通過以上步驟以后,一個服務程序開發(fā)基本完成,你只需要把它安裝即可,選擇解決方案,生成解決方案,再打開你的方案位置文件夾下,看看你的Bin目錄,出現(xiàn)如下文件
FileOperation.exe
FileOperation.pdb
FileOperation.vshost.exe
FileOperation.vshost.exe.manifest
接下來要做的就是要把FileOperation服務程序安裝到你的系統(tǒng)當中去,依如下步驟打開Visual Studio.net 2010的命令行程序
如下圖所示
?
3.2?? 將命令行程序轉到你項目bin文件夾下如下圖所示
?
3.3?? 安裝和缷載Windows Service的命令分別是
installutil 服務程序.exe, installutil /u服務程序.exe
這里我先安裝項目,輸入如下命令
Installutil FileOperation.exe
將出現(xiàn)如下圖所示內(nèi)容
?
最后內(nèi)容將看到
The Commit phase completed successfully
the transacted install has completed
表示服務程序已經(jīng)安裝完成
通過以下步驟打開服務窗口,你將看到名為FileOperation服務程序
開始->控制面版->系統(tǒng)與安全->管理工具->服務
你需要手動啟動服務,一段時間以后你將看到log.txt 文件里寫的信息
?
4.??????????? 開發(fā)調(diào)試
1.1?? Windows service 程序無法像其它程序那樣按F5去設置斷點來調(diào)試,需要采用附加進程的方式,依如下操作便加像平常一樣去調(diào)試程序了
Debug->Attach to process,選中剛剛開發(fā)好的FileOperation進程后,點擊attach,便可以設置斷點了,由于之前的程序是一分鐘執(zhí)行一次寫文件操作,你每隔一分鐘將會收到一次調(diào)試,需要注意的是,你調(diào)試的程序一定要和你安裝的服務程序是完全一樣的。
5.??????????? 注意事項
略
?
?
6.?????? 參考文資料
http://msdn.microsoft.com/zh-cn/library/9k985bc9(v=VS.80).aspx?
?
轉載于:https://www.cnblogs.com/zycblog/archive/2010/07/02/1769676.html
總結
以上是生活随笔為你收集整理的Visual Studio.net 2010 Windows Service 开发,安装与调试的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据库------事务
- 下一篇: 程序员的十层楼(11层)