本实例主要实现下面三个基本功能

1、C#开发windows服务

2、禁止QQ等程序运行

3、为windows服务创建自动安装程序

下面针对这三个基本功能进行实现

一、C#开发windows服务

Windows服务在VS以前的版本中叫NT服务,在VS.NET启用了新的名称。用C#创建windows服务不是一件困难的事,下页针对服务创建、启动、停止做详细介绍

1、首先在vs中添加一winform程序KillService

2、在解决方案添加新项中添加Windows服务

3、打开服务页面,切换至代码页面有两个方法如下:

protected override void OnStart(string[] args)
{
// TODO: 在此处添加代码以启动服务。
}
protected override void OnStop()
{
// TODO: 在此处添加代码以执行停止服务所需的关闭操作。
}

当服务启动之后一般会要求每隔几秒或者几分钟刷新一次数据,所以要用到一个定时器,在定时器里边进行业务操作。windows服务不能直接在VS下进行调试,所以可以选择使用日志形式记录服务的各种启动停止或者异常的状态。具体实现代码如下:

partial class Service1 : ServiceBase
{
static System.Timers.Timer oTimer_Get = new System.Timers.Timer();
public Service1()
{
InitializeComponent();
} protected override void OnStart(string[] args)
{
// TODO: 在此处添加代码以启动服务。
AutoLog = false;
FileLog.Success("服务已启动");
oTimer_Get.Enabled = true;
oTimer_Get.Interval = ;
oTimer_Get.Elapsed += new System.Timers.ElapsedEventHandler(OnTimedEvent);
}
private void OnTimedEvent(object sender, System.Timers.ElapsedEventArgs e)
{
FileLog.Success("开始发送");
oTimer_Get.Enabled = false;
try
{
//此处可进行编写详细的业务操作
}
catch (Exception ex)
{
FileLog.Error(ex.Source + "。" + ex.Message);
}
oTimer_Get.Enabled = true;
FileLog.Success("结束发送");
}
protected override void OnStop()
{
// TODO: 在此处添加代码以执行停止服务所需的关闭操作。
FileLog.Success("服务已停止");
oTimer_Get.Enabled = false;
}
}

文件记录类代码

/// <summary>
/// 文件型日志记录
/// </summary>
public static class FileLog
{
private static string sFilePath = System.Configuration.ConfigurationSettings.AppSettings["UserLog"];
/// <summary>
/// 错误日志
/// </summary>
/// <param name="Message">错误内容</param>
public static void Error(string Message)
{
try
{
if (!Directory.Exists(sFilePath))
{
Directory.CreateDirectory(sFilePath);
}
string sFileName = sFilePath + "\\" + string.Format("{0}-Error.txt", DateTime.Now.ToString("yyyy-MM-dd"));
string sContent = string.Format("{0}-- {1}\r\n", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), Message);
FileStream fs = new FileStream(sFileName, FileMode.Append);
Byte[] b = Encoding.Default.GetBytes(sContent);
fs.Write(b, , b.Length);
fs.Close();
}
catch { }
}
/// <summary>
/// 正确日志
/// </summary>
/// <param name="Message">正确内容</param>
public static void Success(string Message)
{
try
{
if (!Directory.Exists(sFilePath))
{
Directory.CreateDirectory(sFilePath);
}
string sFileName = sFilePath + "\\" + string.Format("{0}-Success.txt", DateTime.Now.ToString("yyyy-MM-dd"));
string sContent = string.Format("{0}-- {1}\r\n", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), Message);
FileStream fs = new FileStream(sFileName, FileMode.Append);
Byte[] b = Encoding.Default.GetBytes(sContent);
fs.Write(b, , b.Length);
fs.Close();
}
catch { }
}
}

4、服务需要一个启动入口,打开program.cs文件在main函数里边编写入口代码如下:

static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[] {
new Service1()
};
ServiceBase.Run(ServicesToRun);
}
}

到此windows服务编写完成,但是现在该服务没有什么的业务操作功能。接下来实现禁止本机QQ程序运行功能

二、禁止QQ等程序运行

只需获取本机所有运行的进行,通过Process.kill()方法结束该进程即可

Process[] process = Process.GetProcesses();
for (int i = ; i < process.Length; i++)
{
if (process[i].ProcessName == "QQ")
{
process[i].Kill();
}
}

将该操作放至windows服务中的业务操作模块即可。

三、为windows服务创建自动安装程序

上面实现了windows服务基本的业务操作功能,下面为该windows服务创建自动安装程序,

1、切换至service.cs设计页面,右键选择添加安装程序

2、这时项目中就添加了一个新类 ProjectInstaller 和两个安装组件 ServiceProcessInstaller 和 ServiceInstaller,并且服务的属性值被复制到组件。

3、若要确定如何启动服务,请右键 ServiceInstaller1属性并将 StartType 属性设置为适当的值。

Manual      服务安装后,必须手动启动。Automatic    每次计算机重新启动时,服务都会自动启动。Disabled     服务无法启动。

4、将serviceProcessInstaller类的Account属性改为 LocalSystem这样,不论是以哪个用户登录的系统,服务总会启动。

这些windows服务的安装程序已经完成。通过从生成菜单中选择生成来生成项目。

注意   不要通过按 F5 键来运行项目——不能以这种方式运行服务项目。

5、创建启动和停止文件

安装文件Install.bat实现如下:

cd %SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe KillService.exe

Net Start 自动查杀服务
sc config 自动查杀服务 start= auto

KillService.exe是你生成的可执行文件的路径

自动查杀服务是windows服务的名称

停止文件Uninstall.bat文件的实现如下:

%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe /u KillService.exe

KillService.exe是你生成的可执行文件的路径

PS:当这两个文件保存成功之后,执行时一定要“以管理员身份运行”,否则服务启动出错

如果服务安装成功,可以在资源管理器中的服务查看到正在运行的自动查杀服务。

至此整个实例基本完成

本实例主要是为了学习Windows服务的开发,启动,停止。具体业务功能根据需求进行调整,比如定时从webservice接口中获取新添加的数据等需求

C#开发Windows服务 附简单实例实现禁止QQ运行的更多相关文章

  1. C#开发Windows服务详细流程

    1.Windows服务简单介绍 Windows服务程序是在Windows操作系统下能完成特定功能的可执行的应用程序,主要用于长时间运行的功能或者执行定时任务.一般情况下,用户不能通过用户界面来安装和启 ...

  2. 使用C#开发windows服务定时发消息到钉钉群_群组简单消息

    前言:本提醒服务,是由C#语言开发的,主要由windows服务项目和winform项目组成,运行服务可实现功能:向钉钉自定义机器人群组里,定时,定次,推送多个自定义消息内容,并实现主要功能的日志记录. ...

  3. 使用Visual Studio 2015 Community 开发windows服务

    昨天研究在.NET下开发Windows服务程序,期间遇到一些小问题,这里仅将自己的开发过程和需要注意的地方写下和广大网友分享……  1.基础   Windows服务是指系统启动时能够自己运行的程序.W ...

  4. C# DateTime的11种构造函数 [Abp 源码分析]十五、自动审计记录 .Net 登陆的时候添加验证码 使用Topshelf开发Windows服务、记录日志 日常杂记——C#验证码 c#_生成图片式验证码 C# 利用SharpZipLib生成压缩包 Sql2012如何将远程服务器数据库及表、表结构、表数据导入本地数据库

    C# DateTime的11种构造函数   别的也不多说没直接贴代码 using System; using System.Collections.Generic; using System.Glob ...

  5. android Jni NDK开发环境搭建及其简单实例的编写

    android  Jni  NDK开发环境搭建及其简单实例的编写 由于工作需要,需要采用开发想要的JNI,由于之前没有接触过安卓的开发,所以更加网上的帖子,学习了下.遇到了些问题,然后总结下学习过程中 ...

  6. c#金额转换成中文大写金额 .Net开发Windows服务

    c#金额转换成中文大写金额   2018-08-24 转别人 c#金额转换成中文大写金额 /// <summary> /// 金额转换成中文大写金额 /// </summary> ...

  7. C#开发windows服务如何调试——资料整理

    原文标题:C# Windows服务程序如何进行调试 原文地址:https://jingyan.baidu.com/article/456c463b18e1b00a583144b3.html 第一种: ...

  8. c#创建windows服务入门教程实例

    用c#中创建一个windows服务非常简单,与windows服务相关的类都在System.ServiceProcess命名空间下. 每个服务都需要继承自ServiceBase类,并重写相应的启动.暂停 ...

  9. VS2013开发Windows服务项目

    这篇随笔里,我将介绍如何用VS2013开发Windows服务项目,实现的功能是定时发送电子邮件. 开发环境:VS2013,SQL Server2008,采用C#语言开发 步骤一:创建Windows服务 ...

随机推荐

  1. realestate.cei.gov.cn

    using AnfleCrawler.Common; using System; using System.Collections.Concurrent; using System.Collectio ...

  2. 【php常用】常用函数啥的

    1.intval()  把变量转换成整数类型 2.trim() 去除字符串两边空格or 加上参数是去除该参数 3.array_values()  函数返回一个包含给定数组中所有键值的数组,但不保留键名 ...

  3. Java EE注册三部曲(一步曲)

    一步曲(html+servlet+SQL+Bean+Dao+加密(Base64)) 设计思路: 1:编写前台页面jsp:register.jsp,使得用户能够实行注册操作 2:编写servlet:re ...

  4. php大力力 [040节] 买了一天域名,整了一天后台,新网后台不懂啊

    php大力力 [040节] 买了一天域名,整了一天后台,新网后台不懂啊]]] 还有万网那些域名要备案,备案,备案中...................wqnmlgb 今天摩托车的前后轮被扎了,tnn ...

  5. 1、c#对XML文件的解析

    1.XML文件 <?xml version="1.0" encoding="utf-8"?> <PersonF xmlns="&qu ...

  6. 添加数据之后不跳页面显示一个漂亮的提示信息(非ajax提交数据)

    1.在后台设置一个添加成功与否的提示 2.在添加页面设置提示信息 (自己喜欢什么样式就条成什么样式) 3.写js控制提示信息的显示与消失

  7. IOS开发-当遇到tableView整体上移时的解决方案

    方案一在使用了navigationController后,当界面进行跳转往返后,时而会出现tableView上移的情况,通常会自动上移64个像素,那么这种情况,我们可以关闭tableView的自动适配 ...

  8. 简单介绍Javascript匿名函数和面向对象编程

    忙里偷闲,简单介绍一下Javascript中匿名函数和闭包函数以及面向对象编程.首先简单介绍一下Javascript中的密名函数. 在Javascript中函数有以下3中定义方式: 1.最常用的定义方 ...

  9. Notepad++配置Python开发环境

    1. 安装Python 1 下载 我选择了32位的2.7版本.https://www.python.org/ftp/python/2.7.8/python-2.7.8.msi 2. 安装 安装的时候可 ...

  10. win7 下 arp 绑定mac和Ip

    我们都知道直接执行arp -s 命令即可绑定IP和MAC地址,但是在Win7下会遇到不能运行arp -s 进行静态mac绑定的情况,提示“ARP 项添加失败: 拒绝访问.”(英文版提示:The ARP ...