当前位置: 首页 > news >正文

Windows服务程序和安装程序制作

  转:http://www.cr173.com/html/15350_1.html

  本文介绍了如何用C#创建、安装、启动、监控、卸载简单的Windows Service 的内容步骤和注意事项。

一、创建一个Windows Service

1)创建Windows Service项目

2)将.net环境改成2.0

3)对Service重命名

  将Service1删除,重新添加一个服务,这里我们命名为ServiceTest。

二、创建服务安装程序

1)添加安装程序

  之后我们可以看到上图,自动为我们创建了ProjectInstaller.cs以及2个安装的组件。

2)服务名称

  ServiceName的值为服务发的名称

3)修改安装权限

  右键serviceProcessInsraller1,选择属性,将Account的值改为LocalSystem。

三、写入服务代码

1)打开ServiceTest代码

  右键ServiceTest,选择查看代码。

2)写入Service逻辑

  添加如下代码:

namespace WindowsServiceTest
{
    public partial class ServiceTest : ServiceBase
    {
        public ServiceTest()
        {
            InitializeComponent();
        }
protected override void OnStart(string[] args)
        {
        }

        protected override void OnStop()
        {
        }
    }
}

四、服务的安装

  服务安装和卸载要用到.net平台下面的一个文件InstallUtil.exe,在不同的.net版本项目下面要使用不同的InstallUtil,所以要注意项目.net的版本和目标机器的版本是否一致。在.net 2.0的环境下面InstallUtil.exe文件目录是:C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/InstallUtil.exe

  在命令提示符中使用下面的格式去安装和卸载服务,FilePath上面服务的bin下面的exe文件。安装成功后,服务的名称为:ServiceTest。

安装:
C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/InstallUtil.exe  FilePath/xx.exe

卸载:
C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/InstallUtil.exe -u FilePath/xx.exe 

 注:

  一个服务首先是一个Win32可执行程序,或者是是rundll32.exe来运行一个.dll的方式形成的进程。跟普通应用程序不一样,如打开WORD,有一个界面出来,但服务没有用户界面,也不能通过直接双击运行相应的.exe程序来运行。

  为Windows服务程序没有用户界面,所以基于用户界面的API函数对其是没有多大的意义。为了能使一个Windows服务程序能够正常并有效的在系统环境下工作,程序员必须实现一系列的方法来完成其服务功能。Windows服务程序的应用范围很广,典型的Windows服务程序包含了硬件控制、应用程序监视、系统级应用、诊断、报告、Web和文件系统服务等功能。

  服务应用程序在不同于登录用户的交互区域的窗口区域中运行。窗口区域是包含剪贴板、一组全局原子和一组桌面对象的安全对象。由于 Windows 服务的区域不是交互区域,因此服务应用程序中引发的对话框将是不可见的,并且可能导致程序停止响应。同样,错误信息应记录在事件日志中,而不是在用户界面中引发。所以如果希望在服务中弹出提示框是不现实的,可以用托盘程序来代替服务。

 

 

相关文章:

  • MySQL数据库优化法则总结
  • 转载: Vim 练级攻略
  • Vue.js 移动端适配之 vw 解决方案
  • 函数方法
  • 【Sqlserver】SqlServer中EXEC 与 SP_EXECUTESQL的 区别
  • linux下的文件操作——批量重命名
  • svn版本控制-windows篇
  • 目标检测面面观
  • 支付-微信支付(1)
  • 如何让open***在windows启动时自动加载
  • swift学习笔记《4》
  • myeclipse中如何查看jdk的类文件
  • WPF 控件库——带有惯性的ScrollViewer
  • 利用 docker 配置 pinbot-crawl 环境
  • Express简介
  • JavaScript 如何正确处理 Unicode 编码问题!
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • 【5+】跨webview多页面 触发事件(二)
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • JavaScript中的对象个人分享
  • laravel with 查询列表限制条数
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • node 版本过低
  • oldjun 检测网站的经验
  • PhantomJS 安装
  • php中curl和soap方式请求服务超时问题
  • python 装饰器(一)
  • SegmentFault 2015 Top Rank
  • Spring核心 Bean的高级装配
  • 前端代码风格自动化系列(二)之Commitlint
  • 突破自己的技术思维
  • 微服务入门【系列视频课程】
  • 小而合理的前端理论:rscss和rsjs
  • 智能合约Solidity教程-事件和日志(一)
  • Java数据解析之JSON
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (南京观海微电子)——I3C协议介绍
  • (转)shell调试方法
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • .NET 反射的使用
  • .net2005怎么读string形的xml,不是xml文件。
  • .NET基础篇——反射的奥妙
  • .NET企业级应用架构设计系列之开场白
  • .NET上SQLite的连接
  • @synthesize和@dynamic分别有什么作用?
  • [ 转载 ] SharePoint 资料
  • [CareerCup] 6.1 Find Heavy Bottle 寻找重瓶子
  • [DNS网络] 网页无法打开、显示不全、加载卡顿缓慢 | 解决方案