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 = 10000;
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, 0, 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, 0, 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 = 0; 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:当这两个文件保存成功之后,执行时一定要“以管理员身份运行”,否则服务启动出错
如果服务安装成功,可以在资源管理器中的服务查看到正在运行的自动查杀服务。
至此整个实例基本完成
相关文章
- 这篇文章主要介绍了C#创建Windows服务的实现方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
- 这篇文章主要介绍了C#使用windows服务开启应用程序的方法,实例分析了C#操作windows服务开启应用程序所遇到的问题及相关解决技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了c#使用windows服务更新站点地图的详细示例,需要的朋友可以参考下...2020-06-25
c#创建windows服务(Windows Services)详细步骤
这篇文章主要介绍了c#创建windows服务(Windows Services)详细步骤,大家参考使用吧...2020-06-25- 这篇文章主要介绍了VS2013创建Windows服务与调试服务的图文方法,需要的朋友可以参考下...2020-06-25
- C#启动windows服务的方法都是什么呢?C#启动服务类型为Disabled的windows服务会遇到什么样的问题呢?那么本文就向你介绍C#启动windows服务的方法的相关内容...2020-06-25
- 本文介绍了如何用C#创建、安装、启动、监控、卸载简单的Windows Service 的内容步骤和注意事项,需要的朋友可以参考下...2020-06-25
vista和win7在windows服务中交互桌面权限问题解决方法:穿透Session 0 隔离
服务(Service)对于大家来说一定不会陌生,它是Windows 操作系统重要的组成部分。我们可以把服务想像成一种特殊的应用程序,它随系统的“开启~关闭”而“开始~停止”其工作内容,在这期间无需任何用户参与...2020-06-25Windows服务编写(Windows Service,system权限)程序显示界面与用户交互(xp,win7通用)
这篇文章主要介绍了Windows服务编写Windows Service,system权限程序显示界面与用户交互(xp,win7通用) ,需要的朋友可以参考下...2020-06-25- windows服务是windows系统中一类特殊的应用程序,一般情况下它们只会在后台运行,不会影响前台操作,非常适合做一些不需要用户参与的而又需要长时间执行的任务...2020-06-25
- 本篇文章主要介绍使用Microsoft Visual Studio2012可以很方便的创建一个Windows服务,本例实现一个向D盘的txt文件里,写入系统时间的Windows服务...2020-06-25
- 这篇文章主要介绍了C#通过创建Windows服务启动程序的方法,较为详细的分析了C#创建Windows服务应用程序的步骤与相关注意事项,需要的朋友可以参考下...2020-06-25
- 那么来看一下如何才能实现一个可交互的服务呢。步骤与实现基本的服务一样...2021-09-22
- 这篇文章主要介绍了c# 如何将Minio.exe注册成windows服务,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2020-12-08
- 这篇文章主要介绍了使用C#创建Windows服务的实例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
- 这篇文章主要为大家推荐了一款C#版Windows服务安装卸载小工具,小巧灵活的控制台程序,希望大家喜欢,感兴趣的小伙伴们可以参考一下...2020-06-25
- 这篇文章主要介绍了通过C#开发Windows服务,查杀qq进程的服务功能,需要的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了使用winapi安装Windows服务示例,大家参考使用吧...2020-06-25