参考来源:http://blog.csdn.net/morewindows/article/details/6858216

参考来源: http://hi.baidu.com/tfantasy/item/aefa43d66b470a2b38f6f76c

剩下的都是我自己整理的。

在VS2012中新建一个Windows 服务的项目。然后在解决方案目录下找到Services1.cs,切换到代码视图。

这里我代码的主要工作就是开机自动启动该windows服务,每三秒往数据库中插入一条数据。

代码如下

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.Threading.Tasks;
using System.Data.SqlClient; namespace stopvoice
{
public partial class Service1 : ServiceBase
{
System.Timers.Timer timer1; //计时器
public Service1()
{
InitializeComponent();
}
protected override void OnStart(string[] args) //服务启动执行
{
timer1 = new System.Timers.Timer();
timer1.Interval = ; //设置计时器事件间隔执行时间
timer1.Elapsed += new System.Timers.ElapsedEventHandler(timer1_Elapsed);
timer1.Enabled = true;
}
protected override void OnStop() //服务停止执行
{
this.timer1.Enabled = false;
} private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
//执行SQL语句或其他操作 //连接数据库
string SQLCONNECT = @"server=192.168.1.212;database=testdb;uid=sa;pwd=888888";
SqlConnection conn = new SqlConnection(SQLCONNECT);
conn.Open(); //通过SqlCommand 类的ExecuteNonQuery() 来返回受影响的行数。
string SQLCOMMAND2 = "insert into tb1 values(999,999);";
SqlCommand sqlcmd2 = new SqlCommand(SQLCOMMAND2, conn);
//也可以用下面代替
// sqlcmd.ConnectionString = SQLCOMMAND2 int nResult = sqlcmd2.ExecuteNonQuery();
Console.WriteLine("受影响行数:", +nResult);
Console.ReadLine(); conn.Close();
} }
}

写完代码后在Service1.cs的设计界面右击,选择“添加安装程序”,会出现两个安装控件,将servicesInstaller1属性StartType设成Automatic就是开机自动启动,ServicesName就是在服务列表里的名称,可以自定义。servicesProcessInstaller1的属性设成LocalSystem。然后按F5 启动运行,会报错,提示Windows服务启动失败,说什么无法从命令行或调试器启动服务。

这个问题先不管他,但是在我们按F5的那一刹那,这个工程文件夹的Debug目录就生成了一个叫做Services1.exe的可执行文件了——我们的目的已经达成了。接下来我们要做的就是把这个程序安装到windows服务。

现在我们需要一个installutil的安装程序工具,我们可以在C:\Windows\Microsoft.NET\Framework\v4.0.30319中找到他(也许你也能在其他版本里找到它)MSDN告诉我使用 Visual Studio 命令提示符或 Windows SDK 命令提示符可以直接调用到这个Installutil.exe,我试了一下还是提示说这货不是内部或外部命令,直截了当,把上面的路径加入环境变量,然后进入我们的CMD窗口吧。切换到刚刚那个项目的Debug目录下,输入命令installutil services1.exe(当然也许你的可执行文件不叫services1,我只是提醒一下),此时你在命令行输入services.msc回车,会发现服务列表里多出了一个你的windows服务。将其启动后,每三秒就会在数据库中插入一条数据了。

实验结束后,别忘了用installutil  /u  services1.exe 的命令卸载掉这个服务哦,或是禁用服务。另外,如果更新了程序代码重新编译,有了新的services1.exe,只要路径没变,就不需要重新安装该服务的。

相同的功能完全可以在SQL Server的作业中进行,而且方便快捷,当然windows服务肯定有其他的优势,本文只是举个例子,所以不要用这个来板砖我了。

如果是高手,希望能解决Windows服务启动失败的报错问题,当我安装完毕windows服务以后,再次运行还是报一样的错。

windows 服务实例的更多相关文章

  1. 通过asp.net程序来控制自己开发的windows服务

    public ActionResult ListService() { //获取已经保存好的windows服务名称 IList<Model.ReportServicesInfoEnt> L ...

  2. C# Windows服务的创建、安装、调试

    一.查看已有的Windows服务 选择菜单"开始"-〉"控制面板"-〉"管理工具"-〉"服务"来查看现有系统中的服务 二 ...

  3. Windows服务安装、卸载、启动和关闭的管理器

    最近在重构公司的系统,把一些需要独立执行.并不需要人为关注的组件转换为Windows服务,Windows服务在使用的过程中有很多好处,相信这一点,就不用我多说了.但是每次都要建立Windows服务项目 ...

  4. 使用C#调试Windows服务模板项目

    Windows服务是非常强大的应用程序,可用于在backgorund中执行许多不同类型的任务.他们可以在不需要任何用户登录的情况下启动,并且可以使用除登录用户之外的其他用户帐户运行.但是,如果通过遵循 ...

  5. Windows Azure虚拟机和云服务实例计费方式更新

    在之前的Windows Azure计费账单中,A0,A1,A2,A3,A4系列的虚拟机(云服务实例)都是以A1为基准计费单位的,即: 虚拟机大小 计费单位(小时) A0 A1*0.25 A1 A1*1 ...

  6. C#开发Windows服务 附简单实例实现禁止QQ运行

    本实例主要实现下面三个基本功能 1.C#开发windows服务 2.禁止QQ等程序运行 3.为windows服务创建自动安装程序 下面针对这三个基本功能进行实现 一.C#开发windows服务 Win ...

  7. C#创建windows服务搭配定时器Timer使用实例(用代码做,截图版)

       功能说明:C#创建一个windows服务,服务启动时D:\mcWindowsService.txt写入数据,服务运行期间每隔两秒写入当前时间. 原理这些就不说了,三语两语说不清楚,直接贴一个实例 ...

  8. Windows服务System权限下在当前用户桌面创建快捷方式C#实例程序

    Windows服务一般运行在System权限下,这样权限比较高,方便执行一些高权限的操作. 但是,Environment.GetFolderPath等函数获取的也是System用户下的,而不是当前用户 ...

  9. 使用C#创建及调用WCF完整实例 (Windows服务宿主)

    关于WCF的概念.原理.优缺点等,在这里就不多说了,网上很多,可以自行搜索,比我解释的要专业的多. 这里直接说使用Windows 服务(Windows Service)作为宿主如何实现,其它方式不在此 ...

随机推荐

  1. AsyncTask 异步处理

    1 package com.ch.day8_asynctaskdemo; 2 3 import java.util.ArrayList; 4 5 import com.ch.myutils.NetWo ...

  2. python 编辑文件时路径问题解决方法:文件或者目录不存在、文件编辑后无法保存等(以编辑xml文件为例)

    1.获取工程所在根路径:根路径=os.path.dirname(os.path.abspath('__file__')) 2.将获取的根路径和相对路径组合:组合路径=os.path.join(根路径, ...

  3. java多线程 生产者消费者模式

    package de.bvb; /** * 生产者消费者模式 * 通过 wait() 和 notify() 通信方法实现 * */ public class Test1 { public static ...

  4. 使用dom4j操作XML

    DOM4J介绍 DOM4J是使用Java语言编写的,用于读写及操作XML的一套组件,DOM4J同时具有DOM修改文件的优点和SAX读取快速的优点. DOM4J的使用 首先下载dom4j的JAR包,我用 ...

  5. HDU 1072 Nightmare

    Description Ignatius had a nightmare last night. He found himself in a labyrinth with a time bomb on ...

  6. C++中 OOP相关的类型转换

    我们都知道,在C++中有很多类型转换.今天在这里,我们不讨论普通变量的类型转换(比如int转换成double等等).本文主要讨论面向对象相关的类型转换:向上转换和向下转换. 首先,我们定义一个基类Ba ...

  7. SpringMVC框架下数据的增删改查,数据类型转换,数据格式化,数据校验,错误输入的消息回显

    在eclipse中javaEE环境下: 这儿并没有连接数据库,而是将数据存放在map集合中: 将各种架包导入lib下... web.xml文件配置为 <?xml version="1. ...

  8. markdown 标识语言

    打算改用markdown标记语言来写blog,特地收集了些相关的资料: 基本介绍: markdown 语法说明简明版 markdown 语法说明完整版 一些相应的资料: 知乎上相关的问题解答 mark ...

  9. Service服务

    Android多线程: 定义线程的2种方式: 1.继承Thread类,重写run()方法,new一个实例,用start()方法启动:new MyThread().start(); 2.实现Runnab ...

  10. ACM HDU 2041--超级楼梯题解

    超级楼梯 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...