C#开发Windows服务 附简单实例实现禁止QQ运行
本实例主要实现下面三个基本功能
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运行的更多相关文章
- C#开发Windows服务详细流程
1.Windows服务简单介绍 Windows服务程序是在Windows操作系统下能完成特定功能的可执行的应用程序,主要用于长时间运行的功能或者执行定时任务.一般情况下,用户不能通过用户界面来安装和启 ...
- 使用C#开发windows服务定时发消息到钉钉群_群组简单消息
前言:本提醒服务,是由C#语言开发的,主要由windows服务项目和winform项目组成,运行服务可实现功能:向钉钉自定义机器人群组里,定时,定次,推送多个自定义消息内容,并实现主要功能的日志记录. ...
- 使用Visual Studio 2015 Community 开发windows服务
昨天研究在.NET下开发Windows服务程序,期间遇到一些小问题,这里仅将自己的开发过程和需要注意的地方写下和广大网友分享…… 1.基础 Windows服务是指系统启动时能够自己运行的程序.W ...
- C# DateTime的11种构造函数 [Abp 源码分析]十五、自动审计记录 .Net 登陆的时候添加验证码 使用Topshelf开发Windows服务、记录日志 日常杂记——C#验证码 c#_生成图片式验证码 C# 利用SharpZipLib生成压缩包 Sql2012如何将远程服务器数据库及表、表结构、表数据导入本地数据库
C# DateTime的11种构造函数 别的也不多说没直接贴代码 using System; using System.Collections.Generic; using System.Glob ...
- android Jni NDK开发环境搭建及其简单实例的编写
android Jni NDK开发环境搭建及其简单实例的编写 由于工作需要,需要采用开发想要的JNI,由于之前没有接触过安卓的开发,所以更加网上的帖子,学习了下.遇到了些问题,然后总结下学习过程中 ...
- c#金额转换成中文大写金额 .Net开发Windows服务
c#金额转换成中文大写金额 2018-08-24 转别人 c#金额转换成中文大写金额 /// <summary> /// 金额转换成中文大写金额 /// </summary> ...
- C#开发windows服务如何调试——资料整理
原文标题:C# Windows服务程序如何进行调试 原文地址:https://jingyan.baidu.com/article/456c463b18e1b00a583144b3.html 第一种: ...
- c#创建windows服务入门教程实例
用c#中创建一个windows服务非常简单,与windows服务相关的类都在System.ServiceProcess命名空间下. 每个服务都需要继承自ServiceBase类,并重写相应的启动.暂停 ...
- VS2013开发Windows服务项目
这篇随笔里,我将介绍如何用VS2013开发Windows服务项目,实现的功能是定时发送电子邮件. 开发环境:VS2013,SQL Server2008,采用C#语言开发 步骤一:创建Windows服务 ...
随机推荐
- WeX5 快速开发平台 V3.6 正式版发布
WeX5 V3.6 正式版核心特性:一.打包特性增强: 1- 提供多WebView选择,引入腾讯X5引擎,可自动适配移动设备环境进行切换,使通过X5打包生成的App具备更高的兼容性及更小的文件尺寸: ...
- 【转】jQuery异步上传文件
用了 jQuery Form插件来解决这个问题:http://malsup.com/jquery/form/#code-samples 有没有不用该插件来实现呢? 解决方法: 可以采用HTML5,用j ...
- 系统不支持curl
解决安装pinphp时出现的“系统不支持curl!” 今天在本机安装phppin开源程序时,提示“系统不支持curl!”错误. 由于我本机是UBUNTU系统,所以直接通过apt-get进行安装. ...
- 电脑无法登陆ftp
电脑无法登陆ftp,或者对于少数ftp能登陆,大多数不能登陆,用了一大堆ftp软件一样登陆不了.后来baidu了一下,发现是防火墙的问题.据说是Windows防火墙阻止了20/21端口的通信,说白了就 ...
- Animations功能(区别于Transitions)
CSS3实现动画: 1 Transitions:定义元素的某个属性从一个属性值平滑过渡到另一个属性值. Transitions属性的使用方法如下所示: transition: property | ...
- IT行业的正式入门
虽然我是计算机专业毕业的大学生,但我自己认为我连什么是 IT都不了解,我热爱Java程序的设计,所以我现在在努力学习,今天是上Java程序设计的第一天,我正式进入IT业,踏上了这条“不归路”.figh ...
- python语言switch-case
初学python语言,竟然很久才发现python没有switch-case语句,查看官方文档说是可以用if-elseif-elseif....代替. 讲真,这都不是问题.不就是一个条件判断吗.用if- ...
- Oracle学习系列1-7
Oracle学习系列1 两个服务必须启动: OracleOraDb10g*TNListener 和 OracleService*** 使用sqlplusw先进行环境的设置 set linesize 3 ...
- Linux设计准则
计算机体系结构: 运算器 控制器 存储器,内存,编址 输出设备 输入设备 Linux内核功能: 进程管理内存管理文件系统网络功能硬件驱动安全机制 Linux的基本原则: 1.由目的单一的小程序组成: ...
- EF学习笔记——通用增删改查方案
http://blog.csdn.net/leftfist/article/details/25005307 我刚接触EF未久,还不知道它有什么强大之处,但看上去,EF提供了一般的增删改查功能.以往用 ...