C#Windows服务程序开发实例介绍

开发 后端
C#Windows服务程序开发实例主要向你介绍一个用于开机启动其他程序的Windows服务,那么具体的实现的步骤是什么呢?一下的C#Windows服务程序开发实例就向你一一介绍。

C#Windows服务程序开发实例程序的目的和用途:

很多开机启动程序仅仅加在启动项里面,只有登陆后才真正启动。windows服务在开机未进行用户登录前就启动了。正是利用这一点,解决一些服务器自动重启后特定软件也自动启动的问题。

C#Windows服务程序开发1.

新建一个服务项目 visual C#----windows----windows服务;

C#Windows服务程序开发2.

添加一个dataset(.xsd),用于存储启动目标的路径,日志路径等。

在dataset可视化编辑中,添加一个datatable,包含两列 StartAppPath 和 LogFilePath。分别用于存储目标的路径、日志路径。

我认为利用dataset.xsd存储配置参数的优势在于可以忽略xml解析的具体过程直接使用xml文件。

在dataset中 提供了ReadXml方法用于读取xml文件并将其转换成内存中的一张datatable表,数据很容易取出来!同样,WriteXml方法用于存储为xml格式的文件,也仅仅需要一句话而已。

C#Windows服务程序开发3.

program.cs文件 作为程序入口,代码如下:

view plaincopy to clipboardprint?  
using System.Collections.Generic;     
using System.ServiceProcess;     
using System.Text;     
    
namespace WindowsServices_AutoStart     
{     
static class Program     
{     
/// ﹤summary﹥     
/// 应用程序的主入口点。     
/// ﹤/summary﹥     
static void Main()     
{     
ServiceBase[] ServicesToRun;     
    
// 同一进程中可以运行多个用户服务。若要将     
// 另一个服务添加到此进程中,请更改下行以     
// 创建另一个服务对象。例如,     
//     
//   ServicesToRun = new ServiceBase[] {  
new Service1(), new MySecondUserService()};     
//     
ServicesToRun = new ServiceBase[] {   
new WindowsServices_AutoStart() };     
    
ServiceBase.Run(ServicesToRun);     
}     
}     
}    
using System.Collections.Generic;  
using System.ServiceProcess;  
using System.Text;  
 
namespace WindowsServices_AutoStart  
{  
static class Program  
{  
/// ﹤summary﹥  
/// 应用程序的主入口点。  
/// ﹤/summary﹥  
static void Main()  
{  
ServiceBase[] ServicesToRun;  
 
// 同一进程中可以运行多个用户服务。若要将  
// 另一个服务添加到此进程中,请更改下行以  
// 创建另一个服务对象。例如,  
//  
//   ServicesToRun = new ServiceBase[] {  
new Service1(), new MySecondUserService()};  
//  
ServicesToRun = new ServiceBase[] {  
 new WindowsServices_AutoStart() };  
 
ServiceBase.Run(ServicesToRun);  
}  
}  
}  
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.

C#Windows服务程序开发4.

service.cs主文件,代码如下:

view plaincopy to clipboardprint?  
using System;     
using System.Collections.Generic;     
using System.ComponentModel;     
using System.Data;     
using System.IO;     
using System.Diagnostics;     
using System.ServiceProcess;     
using System.Text;     
    
namespace WindowsServices_AutoStart     
{     
public partial class   
WindowsServices_AutoStart : ServiceBase     
{     
public WindowsServices_AutoStart()     
{     
InitializeComponent();     
}     
string StartAppPath ="";  
 //@"F:\00.exe";     
string LogFilePath ="";  
// @"f:\WindowsService.txt";     
protected override void OnStart(string[] args)     
{     
string exePath = System.Threading.  
Thread.GetDomain().BaseDirectory;     
//     
if (!File.Exists(exePath + @"\ServiceAppPath.xml"))     
{     
dsAppPath ds = new dsAppPath();     
object[] obj=new object[2];     
obj[0]="0";     
obj[1]="0";     
ds.Tables["dtAppPath"].Rows.Add(obj);     
ds.Tables["dtAppPath"].WriteXml(  
exePath + @"\ServiceAppPath.xml");     
return;     
}     
try    
{     
dsAppPath ds = new dsAppPath();     
ds.Tables["dtAppPath"].ReadXml(  
exePath + @"\ServiceAppPath.xml");     
DataTable dt = ds.Tables["dtAppPath"];     
StartAppPath = dt.Rows[0]  
["StartAppPath"].ToString();     
LogFilePath = dt.Rows[0]  
["LogFilePath"].ToString();     
}     
catch { return; }     
     
if (File.Exists(StartAppPath))     
{     
try    
{     
Process proc = new Process();     
proc.StartInfo.FileName = StartAppPath; //注意路径     
//proc.StartInfo.Arguments = "";     
proc.Start();     
}     
catch (System.Exception ex)     
{     
//MessageBox.Show(this, "找不到帮助文件路径。  
文件是否被改动或删除?\n" + ex.Message, "提示",  
 MessageBoxButtons.OK, MessageBoxIcon.Information);     
}     
FileStream fs = new FileStream(LogFilePath,   
FileMode.OpenOrCreate, FileAccess.Write);     
StreamWriter m_streamWriter = new StreamWriter(fs);     
m_streamWriter.BaseStream.Seek(0, SeekOrigin.End);     
m_streamWriter.WriteLine("WindowsService:   
Service Started" + DateTime.Now.ToString() + "\n");     
m_streamWriter.Flush();     
m_streamWriter.Close();     
fs.Close();     
}     
}     
    
protected override void OnStop()     
{     
try    
{     
// TODO: 在此处添加代码以执行停止服务所需的关闭操作。     
FileStream fs = new FileStream(LogFilePath,  
 FileMode.OpenOrCreate, FileAccess.Write);     
StreamWriter m_streamWriter = new StreamWriter(fs);     
m_streamWriter.BaseStream.Seek(0, SeekOrigin.End);     
m_streamWriter.WriteLine("WindowsService:  
 Service Stopped " + DateTime.Now.ToString() + "\n");     
m_streamWriter.Flush();     
m_streamWriter.Close();     
fs.Close();     
}     
catch    
{     
    
}     
}     
}     
}    
using System;  
using System.Collections.Generic;  
using System.ComponentModel;  
using System.Data;  
using System.IO;  
using System.Diagnostics;  
using System.ServiceProcess;  
using System.Text;  
 
namespace WindowsServices_AutoStart  
{  
public partial class   
WindowsServices_AutoStart : ServiceBase  
{  
public WindowsServices_AutoStart()  
{  
InitializeComponent();  
}  
string StartAppPath ="";   
//@"F:\00.exe";  
string LogFilePath ="";  
// @"f:\WindowsService.txt";  
protected override void OnStart(string[] args)  
{  
string exePath = System.  
Threading.Thread.GetDomain().BaseDirectory;  
//  
if (!File.Exists(exePath + @"\ServiceAppPath.xml"))  
{  
dsAppPath ds = new dsAppPath();  
object[] obj=new object[2];  
obj[0]="0";  
obj[1]="0";  
ds.Tables["dtAppPath"].Rows.Add(obj);  
ds.Tables["dtAppPath"].WriteXml(  
exePath + @"\ServiceAppPath.xml");  
return;  
}  
try 
{  
dsAppPath ds = new dsAppPath();  
ds.Tables["dtAppPath"].ReadXml(  
exePath + @"\ServiceAppPath.xml");  
DataTable dt = ds.Tables["dtAppPath"];  
StartAppPath = dt.Rows[0]  
["StartAppPath"].ToString();  
LogFilePath = dt.Rows[0]  
["LogFilePath"].ToString();  
}  
catch { return; }  
 
if (File.Exists(StartAppPath))  
{  
try 
{  
Process proc = new Process();  
proc.StartInfo.FileName = StartAppPath; //注意路径  
//proc.StartInfo.Arguments = "";  
proc.Start();  
}  
catch (System.Exception ex)  
{  
//MessageBox.Show(this, "  
找不到帮助文件路径。文件是否被改动或删除?\n"  
 + ex.Message, "提示", MessageBoxButtons.OK,  
 MessageBoxIcon.Information);  
}  
FileStream fs = new FileStream(LogFilePath,  
 FileMode.OpenOrCreate, FileAccess.Write);  
StreamWriter m_streamWriter = new StreamWriter(fs);  
m_streamWriter.BaseStream.Seek(0, SeekOrigin.End);  
m_streamWriter.WriteLine("WindowsService:   
Service Started" + DateTime.Now.ToString() + "\n");  
m_streamWriter.Flush();  
m_streamWriter.Close();  
fs.Close();  
}  
}  
 
protected override void OnStop()  
{  
try 
{  
// TODO: 在此处添加代码以执行停止服务所需的关闭操作。  
FileStream fs = new FileStream(LogFilePath,   
FileMode.OpenOrCreate, FileAccess.Write);  
StreamWriter m_streamWriter = new StreamWriter(fs);  
m_streamWriter.BaseStream.Seek(0, SeekOrigin.End);  
m_streamWriter.WriteLine("WindowsService:   
Service Stopped " + DateTime.Now.ToString() + "\n");  
m_streamWriter.Flush();  
m_streamWriter.Close();  
fs.Close();  
}  
catch 
{  
 
}  
}  
}  

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.
  • 100.
  • 101.
  • 102.
  • 103.
  • 104.
  • 105.
  • 106.
  • 107.
  • 108.
  • 109.
  • 110.
  • 111.
  • 112.
  • 113.
  • 114.
  • 115.
  • 116.
  • 117.
  • 118.
  • 119.
  • 120.
  • 121.
  • 122.
  • 123.
  • 124.
  • 125.
  • 126.
  • 127.
  • 128.
  • 129.
  • 130.
  • 131.
  • 132.
  • 133.
  • 134.
  • 135.
  • 136.
  • 137.
  • 138.
  • 139.
  • 140.
  • 141.
  • 142.
  • 143.
  • 144.
  • 145.
  • 146.
  • 147.
  • 148.
  • 149.
  • 150.
  • 151.
  • 152.
  • 153.
  • 154.
  • 155.
  • 156.
  • 157.
  • 158.
  • 159.
  • 160.
  • 161.
  • 162.
  • 163.
  • 164.
  • 165.
  • 166.
  • 167.
  • 168.
  • 169.
  • 170.
  • 171.
  • 172.
  • 173.
  • 174.
  • 175.
  • 176.
  • 177.
  • 178.
  • 179.
  • 180.
  • 181.
  • 182.
  • 183.
  • 184.
  • 185.
  • 186.
  • 187.
  • 188.
  • 189.
  • 190.
  • 191.
  • 192.
  • 193.
  • 194.
  • 195.
  • 196.
  • 197.
  • 198.
  • 199.
  • 200.
  • 201.
  • 202.

C#Windows服务程序开发5.

启动调试,成功时也会弹出一个对话框大致意思是提示服务需要安装。

C#Windows服务程序开发6.

把Debug文件夹下面的.exe执行程序,安装为windows系统服务,安装方法网上很多介绍。我说一种常用的:

C#Windows服务程序开发之安装服务

访问项目中的已编译可执行文件所在的目录。

用项目的输出作为参数,从命令行运行 InstallUtil.exe。在命令行中输入下列代码: 

installutil yourproject.exe

C#Windows服务程序开发之卸载服务 

用项目的输出作为参数,从命令行运行 InstallUtil.exe。 
installutil /u yourproject.exe

至此,整个服务已经编写,编译,安装完成,你可以在控制面板的管理工具的服务中,看到你编写的服务。

C#Windows服务程序开发7.

安装好了之后在系统服务列表中可以管理服务,这时要注意将服务的属性窗口----登陆----“允许于桌面交互”勾选!这样才能在启动了你要的目标程序后不单单存留于进程。在桌面上也看得到。

C#Windows服务程序开发8.

关于卸载服务,目前有两个概念:一是禁用而已;一是完全删除服务。 前者可以通过服务管理窗口直接完成。后者则需要进入注册表

“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services”找到服务名称的文件夹,整个删掉,重新启动电脑后,服务消失。

C#Windows服务程序开发9.

扩展思考:经过修改代码,还可以实现:启动目标程序之前,检测进程中是否存在目标程序,存在则不再次启动。

C#Windows服务程序开发的实例的基本内容就向你,希望对你学习和理解C#Windows服务程序开发有所帮助。

【编辑推荐】

  1. C#Windows服务程序开发之Windows服务浅析
  2. C#Windows服务程序安装浅析
  3. C#Windows服务程序开发的体会
  4. C#启动windows服务的方法浅析
  5. C#windows服务状态改变操作浅析
责任编辑:仲衡 来源: 百度空间
相关推荐

2009-08-14 14:17:16

C#Windows服务

2009-08-14 10:50:09

Windows服务介绍

2009-08-14 14:25:09

Windows服务程序

2009-08-14 15:19:38

Windows服务程序Windows服务

2009-08-14 15:54:50

Windows服务程序C#Windows服务

2009-08-14 14:45:03

C#Windows服务

2009-08-14 15:06:08

Windows服务程序

2009-08-14 15:47:18

C#Windows服务

2009-08-14 16:48:39

C#Windows服务

2009-08-14 13:41:13

C#Windows服务

2009-08-14 17:36:20

C#Windows应用

2009-08-14 17:27:30

C#Windows应用

2009-08-14 14:53:55

WINDOWS服务交互

2009-08-14 17:55:52

C#Windows应用

2009-08-14 17:43:20

C#Windows应用

2009-08-14 11:15:19

文件监视C#Windows服务

2009-08-14 16:13:25

C#windows服务

2009-08-14 18:00:22

C#Windows应用

2009-08-14 18:04:59

C#Windows应用

2009-08-14 17:51:32

C#Windows应用
点赞
收藏

51CTO技术栈公众号