Win服务程序编写以及安装一般步骤

  Windows服务的优点有:1. 能够自动运行。2. 不要求用户交互。3. 在后台运行。本文将介绍常见服务程序编写的一般步骤以及注意事项。

设计服务程序实例:

  1. 创建服务程序,主要功能:隔段时间自动写入字符串到文本文档中。

  使用语言:VB.Net,开发工具:Visual Studio 2010

  • 新建服务项目

  如图1所示:

图1

  • 添加组件

    操作如图2,得到如图3结果

图2

图3

  System.windows.forms中的time组件在服务程序中部适用,所以此处要选择system.timers.timer。继续图3操作后设置timer以及service1的属性.如图4/5。

图4

图5

  • 程序编写

图6

  代码如下:

 Protected Overrides Sub OnStart(ByVal args() As String)

 ' 请在此处添加代码以启动您的服务。此方法应完成设置工作,

 ' 以使您的服务开始工作。

 Timer1.Start()

 End Sub

 Protected Overrides Sub OnStop()

 ' 在此处添加代码以执行任何必要的拆解操作,从而停止您的服务。

 Timer1.Stop()

 End Sub

 Private Sub Timer1_Elapsed(ByVal sender As System.Object, ByVal e As System.Timers.ElapsedEventArgs) Handles Timer1.Elapsed

 Dim witer As StreamWriter = New StreamWriter("C:\string.txt", True)

 witer.WriteLine("YourText")

 witer.Close()

 End Sub

  或者基于filestream写入,代码如下:

 Private Sub Timer1_Elapsed(ByVal sender As System.Object, ByVal e As System.Timers.ElapsedEventArgs) Handles Timer1.Elapsed

 Dim fstream As New FileStream("G:\string.txt", FileMode.OpenOrCreate, FileAccess.Write)

 Dim write As New StreamWriter(fstream)

 fstream.Seek(, SeekOrigin.End)

 write.Write("MyTestService" & i.ToString)

 write.Close()

 fstream.Close()

 i += 

 End Sub
  • 服务程序安装

图7

  图7操作后出现如图8界面,设置安装控件属性如图9和图10

图8

图9

图10

  .net编写服务程序集成了许多的功能,此处创建服务安装,并不需要编写程序,只需添加控件,修改属性即可,十分方便。

  • 编译生成

  编译会出现警告,如图11,但程序没出先错误,查看C:\出现"string.text"文档,里面写入了文本。

图11

  • 安装及卸载

  启动vs命令提示符窗口。如图12

图12

  安装

  注意要以管理员身份运行

  Windows服务安装异常:System.Security.SecurityException: 未找到源,但未能搜索某些或全部事件日志。不可 访问的日志: Security。解决办法,以管理员身份运行即可。

  输入代码:

    InstallUtil C:\Users\h\Desktop\timetest_WindowsService\timetest_WindowsService\bin\Debug\timetest_WindowsService.exe

图13

  卸载

    installutil/u C:\Users\h\Desktop\timetest_WindowsService\timetest_WindowsService\bin\Debug\timetest_WindowsService.exe

图14

  默认情况下,Windows服务基于安全考虑,是不允许任何服务程序和桌面进行交互的。也就是说,使用任何的Windows Form 的很多特性将会莫名奇妙的不起作用,如进行messageBox的显示,启动另一进程,诸如:打开某个pdf格式的文件,者使用System.Windows.Form.Timer对象也不行,这种不起作用表现在没有进行服务程序安装的情况下调试的时候会提示无法启动服务需要安装的警告,但是 messageBox仍会显示,pdf格式的文档仍会打开;奇怪的是,在安装后,启动服务程序后,messageBox以及pdf格式的文档均不会打,开程序将没任何的响应。由于Windows服务具有难以调试的特点,如果不注意这点,你反复检查自己的代码,都很难发现问题的所在的。

  但也并不是说不能编写复杂的交互式服务程序,只是涉及到的知识会更复杂一些,通常会用涉及到一些Windows API接口的操作。本文旨在说明服务程序编写的一般步骤,对于复杂的交互服务程序,其一般流程大致相同,网上已有大神在此有详细的解释说明。可参考博客:http://www.cnblogs.com/gnielee/archive/2010/04/08/session0-isolation-part2.html,里面有很详细的介绍。

Win服务程序编写以及安装一般步骤的更多相关文章

  1. windows后台服务程序编写

    Windows后台服务程序编写 1. 为什么要编写后台服务程序 工作中有一个程序需要写成后台服务的形式,摸索了一下,跟大家分享. 在windows操作系统中后台进程被称为 service. 服务是一种 ...

  2. PostgreSQL在win7上安装详细步骤

    原文:PostgreSQL在win7上安装详细步骤 PostgreSQL安装: 一.windows下安装过程 安装介质:postgresql-9.1.3-1-windows.exe(46M),安装过程 ...

  3. Storm集群安装部署步骤【详细版】

    作者: 大圆那些事 | 文章可以转载,请以超链接形式标明文章原始出处和作者信息 网址: http://www.cnblogs.com/panfeng412/archive/2012/11/30/how ...

  4. windows2003最详细的安装操作步骤.(最详细)

    以下为windows2003的安装操作步骤,由于安装操作步骤较多,安装可能需要一定的实际安装经验.安装时请参照此文档一步步完成安装. 一.首先准备好Windows2003安装光盘CD1,将CD1光盘放 ...

  5. Apache安装配置步骤

    注释:这里以Linux 红帽商业版为例~~~~~~~纯手打啊 Apache安装配置步骤 准备:关闭其他虚拟设备 #/etc/init.d/libvirtd stop #/etc/init.d/xend ...

  6. an'gularjs 环境搭建之NodeJS、NPM安装配置步骤(windows版本)

    NodeJS.NPM安装配置步骤(windows版本)  :http://xiaoyaojones.blog.163.com/blog/static/28370125201351501113581/ ...

  7. linux/centos下安装nginx(rpm安装和源码安装)详细步骤

    Centos下安装nginx rpm包                                                                                 ...

  8. CentOS7/RHEL7安装Redis步骤详解

    CentOS7/RHEL7安装Redis步骤详解 CentOS7/RHEL7安装Redis还是头一次测试安装了,因为centos7升级之后与centos6有比较大的区别了,下面我们就一起来看看Cent ...

  9. Storm集群安装部署步骤

    本文以Twitter Storm官方Wiki为基础,详细描述如何快速搭建一个Storm集群,其中,项目实践中遇到的问题及经验总结,在相应章节以"注意事项"的形式给出. 1. Sto ...

随机推荐

  1. 魔道祖师 (作者:墨香铜臭)mobi格式下载

    下载地址:[点我]电视剧陈情令原著主要讲的是五大仙门世家的故事,其中主要讲述的就是魏无羡与蓝忘机之间的故事. 前世的魏无羡万人唾骂,声名狼藉. 被情同手足的师弟带人端了老巢, 纵横一世,死无全尸. 曾 ...

  2. Nginx+Tomat8负载后,利用Redis实现Tomcat8的session共享

    网上相应的文章应该都介绍,这里只特别记录下笔者在实操的过程出现的问题.此文件只针对tomcat 8 版本,之前版本可略过. tomcat 8 中的context.xml文件修改,增加以下配置. Jav ...

  3. python接口自动化(三十二)--Python发送邮件(常见四种邮件内容)番外篇——上(详解)

    简介 本篇文章与前边没有多大关联,就是对前边有关发邮件的总结和梳理.在写脚本时,放到后台运行,想知道执行情况,会通过邮件.SMS(短信).飞信.微信等方式通知管理员,用的最多的是邮件.在linux下, ...

  4. ElasticStack学习(九):深入ElasticSearch搜索之词项、全文本、结构化搜索及相关性算分

    一.基于词项与全文的搜索 1.词项 Term(词项)是表达语意的最小单位,搜索和利用统计语言模型进行自然语言处理都需要处理Term. Term的使用说明: 1)Term Level Query:Ter ...

  5. 【基础算法-模拟-例题-金币】-C++

    原题链接:P2669 金币 这道题目完全是一道模拟题,只要按照题目中的加金币的算法和sum累加就可以很轻易得出最终答案. 说一下有一些点需要注意: 1.用i来计每天发的金币数,n来计已经拿了金币的天数 ...

  6. 推荐 2 款超牛逼、炫酷、实用的Docker管理工具!

    Docker技术的火热程度,想必每个互联网IT技术人员都能时时感受的到,的确,近些年,国内对于Docker容器技术的应用需求越来越强烈!! 人均年薪80万以上,docker到底是什么?为什么这么火? ...

  7. 题解 P5367 【【模板】康托展开】

    P5367 [模板]康托展开 感觉这题难度大概在绿题到蓝题之间qwq 一.洛谷日报[yummy]浅谈康托展开 如我想知道321是{1,2,3}中第几个小的数可以这样考虑 : 第一位是3,当第一位的数小 ...

  8. HttpWebRequest的使用之Get和Post的差别(C#)

    这两天做的是通过一个HttpWebRequest将采集地址发送到服务端,服务端会返回一个JSON格式的字符串,然后我这边再对这个JSON进行反序列化,得到我想要的数据.在这篇文章里我简单介绍一下Htt ...

  9. PHP中的$_GET变量

    定义 在 PHP 中,预定义的 $_GET 变量用于收集来自 method="get" 的表单中的值. $_GET 变量 预定义的 $_GET 变量用于收集来自 method=&q ...

  10. 获取Oracle中表的结构

    首先cmd登录Oracle:sqlplus user/password@host/db_name 然后输入DESC table_name 可以先按住Alt,再选中字段名(块选中快捷方式)