WindowsService服务程序开发
轉(zhuǎn)自:http://www.cnblogs.com/babycool/p/3534786.html?
?Windows服務(wù):Microsoft Windows 服務(wù)(即,以前的 NT服務(wù))使您能夠創(chuàng)建在它們自己的 Windows 會(huì)話中可長(zhǎng)時(shí)間運(yùn)行的可執(zhí)行應(yīng)用程序。這些服務(wù)可以在計(jì)算機(jī)啟動(dòng)時(shí)自動(dòng)啟動(dòng),可以暫停和重新啟動(dòng)而且不顯示任何用戶界面。這使服務(wù)非常適合在服務(wù)器上使用,或任何時(shí)候,為了不影響在同一臺(tái)計(jì)算機(jī)上工作的其他用戶,需要長(zhǎng)時(shí)間運(yùn)行功能時(shí)使用。還可以在不同于登錄用戶的特定用戶帳戶或默認(rèn)計(jì)算機(jī)帳戶的安全上下文中運(yùn)行服務(wù)。(摘自百度百科)
?
一:創(chuàng)建
二:屬性
VS自動(dòng)創(chuàng)建了一個(gè)Service1.cs的文件:
點(diǎn)擊F4,查看各個(gè)屬性的含義:
Autolog???????????????? 是否自動(dòng)寫入系統(tǒng)的日志文件
CanHandlePowerEvent???? 服務(wù)時(shí)候接受電源事件
CanPauseAndContinue????????? 服務(wù)是否接受暫停或繼續(xù)運(yùn)行的請(qǐng)求
CanShutdown 服務(wù)是否在運(yùn)行它的計(jì)算機(jī)關(guān)閉時(shí)收到通知,以便能夠調(diào)用 OnShutDown 過程
CanStop????????????????????????????? 服務(wù)是否接受停止運(yùn)行的請(qǐng)求
ServiceName?????????????????????? 服務(wù)名稱
三:功能
點(diǎn)擊F7查看Service1.cs的源代碼:
默認(rèn)實(shí)現(xiàn)了OnStart和OnStop兩個(gè)方法。
以向一個(gè)文本文件中寫入數(shù)據(jù)操作為例:
?
public partial class Service1 : ServiceBase
{
public Service1()
{
InitializeComponent();
}
/// <summary>
/// 服務(wù)啟動(dòng)
/// http://www.cnblogs.com/babycool
/// </summary>
/// <param name="args"></param>
protected override void OnStart(string[] args)
{
string start = string.Format("{0}-{1}",DateTime.Now.ToString("yyyyMMddHHmmss"),"程序啟動(dòng)了。");
Log(start);
}
/// <summary>
/// 服務(wù)停止
/// http://www.cnblogs.com/babycool
/// </summary>
protected override void OnStop()
{
string start = string.Format("{0}-{1}", DateTime.Now.ToString("yyyyMMddHHmmss"), "程序停止了。");
Log(start);
}
/// <summary>
/// 系統(tǒng)關(guān)閉
/// http://www.cnblogs.com/babycool
/// </summary>
protected override void OnShutdown()
{
string start = string.Format("{0}-{1}", DateTime.Now.ToString("yyyyMMddHHmmss"), "電腦關(guān)閉了。");
Log(start);
}
/*
/// <summary>
/// 服務(wù)暫停
/// http://www.cnblogs.com/babycool
/// </summary>
protected override void OnPause()
{
}
*/
/*
/// <summary>
/// 服務(wù)繼續(xù)
/// </summary>
protected override void OnContinue()
{
base.OnContinue();
}
*/
/*
/// <summary>
/// 系統(tǒng)電源狀態(tài)改變
/// </summary>
/// <param name="powerStatus"></param>
/// <returns></returns>
protected override bool OnPowerEvent(PowerBroadcastStatus powerStatus)
{
return base.OnPowerEvent(powerStatus);
}
*/
void Log(string str)
{
string path = "E://def/6.txt";
using (StreamWriter sw = File.AppendText(path))
{
sw.WriteLine(str);
}
}
}
?
四:安裝程序
切換到 Service1.cs[設(shè)計(jì)] 界面,右擊選擇“添加安裝程序”。
這時(shí)項(xiàng)目中就添加了一個(gè)新類 ProjectInstaller 和兩個(gè)安裝組件 ServiceProcessInstaller 和 ServiceInstaller。
選中“serviceInstaller1” 控件,F4打開屬性面板,
Description ? ? ??服務(wù)程序的描述信息
DisplayName ? ??服務(wù)程序顯示的名稱
StartType ? ? ? ?指定如何啟動(dòng)服務(wù) ? ? ?
? ? ? ? ? ? ? ? ? ??Manual????? 服務(wù)安裝后,必須手動(dòng)啟動(dòng)
? ? ? ? ? ? ? ? ? ??Automatic??? 每次計(jì)算機(jī)重新啟動(dòng)時(shí),服務(wù)都會(huì)自動(dòng)啟動(dòng)
? ? ? ? ? ? ? ? ? ? Disabled???? 服務(wù)無(wú)法啟動(dòng)
?
選中“serviceProcessInstaller1” 控件,F4打開屬性面板:
?
將serviceProcessInstaller類的Account屬性改為 LocalSystem。
這樣,不論是以哪個(gè)用戶登錄的系統(tǒng),服務(wù)總會(huì)啟動(dòng)。
五:生成
右擊 項(xiàng)目 選擇生成 ,不能通過F5來(lái)直接運(yùn)行服務(wù)項(xiàng)目。
?
六:安裝卸載服務(wù)
選擇 VS組件 “Visual Studio命令提示(2010)” 工具,并以“管理員身份運(yùn)行"(win7、win8系統(tǒng)下)。
注意:這里必須選擇“以管理員身份運(yùn)行”,否則會(huì)報(bào)錯(cuò)。
??
從命令行運(yùn)行 Installutil.exe 目錄 ?命令,以項(xiàng)目中的已編譯可執(zhí)行文件所在的目錄作為參數(shù),安裝服務(wù):
因?yàn)镮nstallutil.exe程序默認(rèn)在Windows\System32\目錄下,需要通過cmd命令 "cd" 切換目錄。
從命令行運(yùn)行 Installutil.exe /u 目錄 ? 命令來(lái)卸載服務(wù):
安裝服務(wù):
installutil.exe?E:\XTestDemo\X_15_WindowsService\bin\Debug\X_15_WindowsService.exe
卸載服務(wù):
installutil.exe /u?E:\XTestDemo\X_15_WindowsService\bin\Debug\X_15_WindowsService.exe
七:查看服務(wù)狀態(tài)
在“計(jì)算機(jī)管理”中,服務(wù) 下可以看到剛剛安裝的Service服務(wù)(cmd命令:services.msc---本地服務(wù)設(shè)置):
默認(rèn)是停止?fàn)顟B(tài)。右擊,選擇“啟動(dòng)”,即可開啟服務(wù)。
通過“屬性”,可以查看到更詳細(xì)的信息。
?
總結(jié)
以上是生活随笔為你收集整理的WindowsService服务程序开发的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【OpenCV】直方图应用:直方图均衡化
- 下一篇: 64位系统使用Access 数据库文件的