windows 服务实例

参考来源: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 = 3000;  //设置计时器事件间隔执行时间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 = SQLCOMMAND2int nResult = sqlcmd2.ExecuteNonQuery();Console.WriteLine("受影响行数:", +nResult);Console.ReadLine();conn.Close();}}
}

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

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服务以后,再次运行还是报一样的错。

转载于:https://www.cnblogs.com/ligongzi/p/3329820.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/274012.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java 线程多线程编程2---线程同步

来模拟一个死锁(互相等待): TestDeadLock.java package com.zhj.www;public class TestDeadLock implements Runnable {public int flag 1;static Object o1 new Object();static Object o2 new Object();public void run() {System.out.p…

Java网络编程1---基础

TCP/IP:事实上的标准 自己编的应用程序:应用层 TCP/UDP层 IP层 物理层 数据封装:第五层只与第四层打交道。 数据拆封《TCP/IP详解》网络底层 IP巨大的贡献:提供了独一无二的IP地址。 内网IP:虚假的 子网掩码:255.255.2…

Java网络编程2---Socket-TCP编程

Sockct:插座Socket是关于TCP的。 端口号:两个字节->65536个端口号,一个应用程序占多个端口号; 但是假设一个应用程序占一个端口号;一台电脑会有65535个应用程序。 自己编写程序要占用端口号1024以上后的。 80端口:网…

winform绑定多张图片

开发winform程序的时候经常设计到要显示多张图片的问题,其解决思路一般是先遍历文件夹中的所有图片,然后再把这些图片添加到ImageList控件中,最后再绑定显示出来。这里我们介绍两种绑定的方法: (一)动态生成…

Java网络编程3---Socket-UDP编程

栗子:TestUDPServer.java 服务器端: package com.zhj.www;import java.net.DatagramPacket; import java.net.DatagramSocket;public class TestUDPServer {public static void main(String[] args)throws Exception {byte buf[] new byte[1024];Datagr…

iOS 6 自动布局入门

http://www.raywenderlich.com/zh-hans/22873/ios-6-自动布局-入门-1转载于:https://www.cnblogs.com/ihojin/p/auto-layout.html

Java GUI 基础知识

这部分主要包含AWT、组件和容器、布局管理器Component:所有可以和用户交互的图形元素,他的子类有:输入框… Java.awt及其子包 Container:容器,容纳其他各种各样的Component的元素。 Panel:可以容纳其他元素…

UVA11300

初步解题原理:代数运算单元素极值 代数运算: xi表示第i个给i-1的数量,正负表示给或得 c(a1a2a3....an)/n a1-x1x2c -->x2x1-a1c a2-x2x3c -->x3x1-a1-a22c a3-x3x4c -->x4x1-a1-a2-a33c ...... an-xnx1c -->xnx1-a1-a2-a3....-a(n-1)(n-1)c ansmax{|x1|…

Java GUI 基础知识2 监听机制

TestActionEvent.java没有调用方法,但是有反应。反应自己要编写程序有反应。 事件模型:一定要有某些反应。 写程序,监听的操作是自动发生的,一直监听。钩子函数,(回调函数) 怎么让它自动执行&am…

求字符串的最长回文字串 O(n)

昨天参加了某公司的校园招聘的笔试题,做得惨不忍睹,其中就有这么一道算法设计题:求一个字符串的最长回文字串。我在ACM校队选拔赛上遇到过这道题,当时用的后缀数组AC的,但是模板忘了没写出代码来。 回头我把这道题目再…

数据结构 二、向量(接口与实现and可扩容向量)

ADT操作实例:Disordered:显示出3对逆序紧邻对。Vector模板类初始有效空间为0;基于复制的构造描述区间:左闭右开 为什么*2?有限时间内不必要为扩容而打断。 2、可扩充向量左移一位:加一倍

数据库:mysql 获取刚插入行id[转]

我们在写数据库程序的时候,经常会需要获取某个表中的最大序号数, 一般情况下获取刚插入的数据的id,使用select max(id) from table 是可以的。但在多线程情况下,就不行了。 下面介绍三种方法 (1) getGeneratedKeys()方法: 程序片断: Connection conn ; …

svn由于连接方在一段时间后没有正确答复或连接的主机没有反应连接尝试失败...

解决方法,关掉防火墙, service iptables status 查看iptables状态 service iptables restart iptables服务重启 service iptables stop iptables服务禁用 转载于:https://www.cnblogs.com/jiqing9006/p/3347441.html

Android 服务(Service)

一、服务的解释 服务(Service)是Android中实现后台运行的解决方案,它适合那些去执行不需要和用户交互而且还要求长期运行的任务。服务的运行不依赖任何的与任何用户界面,即使程序被切换到后台,或者用户打开了另外一个应…

CenOS 配置C/C++语言

1.下载eclipseCDT组合包。 2.电脑上安装GCC, G 3.在eclipse上创建一个C project 4. Eclipse CDT功能很强大,安装完虽然可以编译运行c程序,但有个问题,就是找不到c标准库的头文件,无法打开诸如之类的文件,编…

(数据结构)前缀,后缀以及中缀表达式

中缀表达式(中缀记法) 中缀表达式是一种通用的算术或逻辑公式表示方法,操作符以中缀形式处于操作数的中间。中缀表达式是人们常用的算术表示方法。 前缀表达式(前缀记法、波兰式) 前缀表达式是一种没有括号的算术表…

Moravec角点检测算子

Moravec角点检测算子 Moravec 在1981年提出Moravec角点检测算子[1],并将它应用于立体匹配。 首先, 计算每个像素点的兴趣值, 即以该像素点为中心, 取一个w*w(如:5x5)的方形窗口, 计算0度、45度、90度、135度四个方向灰度差的平方和, 取其中的最小值作为该像素点的兴…

java习题-练习1

1、 Given the string, check if it is a palindrome.(回文) Example For inputString "aabaa", the output should becheckPalindrome(inputString) true;For inputString "abac", the output should becheckPalindrome(inputSt…

文件夹生成工具

很简单的一个小工具,输入一个字符串,可以为你生成相应的文件夹. 至于有什么用?我公司一个策划拿一顿饭给我要的. 下载地址: http://pan.baidu.com/s/1d0ewl 转载于:https://www.cnblogs.com/WhyEngine/p/3350053.html

java中System.exit(1)、System.exit(0)、以及return的区别

System.exit(0)是正常退出程序,而System.exit(1)或者说非0表示非正常退出程序System.exit(status)不管status为何值都会退出程序。 和return 相比有以下不同点:return是回到上一层,而System.exit(status)是回到最上层