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

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

至此整个实例基本完成

(0)

相关推荐

  • C#添加Windows服务 定时任务

    本文实例为大家分享了C#添加Windows服务的具体方法,供大家参考,具体内容如下 源码下载地址:http://xiazai.jb51.net/201701/yuanma/Windowsservice1(jb51.net).rar 步骤一.创建服务项目. 步骤二.添加安装程序. 步骤三.服务属性设置 [serviceInstaller1]. 4.1 添加定时任务 public partial class SapSyn : ServiceBase { System.Timers.Timer tim

  • C#基于Windows服务的聊天程序(1)

    本文将演示怎么通过C#开发部署一个Windows服务,该服务提供各客户端的信息通讯,适用于局域网.采用TCP协议,单一服务器连接模式为一对多:多台服务器的情况下,当客户端连接数超过预设值时可自动进行负载转移,当然也可手动切换服务器,这种场景在实际项目中应用广泛. 简单的消息则通过服务器转发,文件类的消息则让客户端自己建立连接进行传输.后续功能将慢慢完善. 自定义协议: 1.新建Windows服务项目 2.修改配置文件添加 <appSettings> <add key="maxQ

  • c#使用windows服务更新站点地图的详细示例

    由于公司平台访问人数逐渐增多,公司项目的数据库已经几次出现宕机现象.为减轻数据库压力,我上个月对公司项目做了下调整.把新闻板块提取出来单独一个站点,单独一个数据库.减少了主站点和数据库的负担和压力. 但放在线上一个月,新闻新的发布数量最少已经有500篇左右.百度只收录了70个左右,于是想到可能是没有站点地图造成的.但怎么定时更新站点地图呢? 我尝试使用windows服务来定时更新站点地图. 首先需要了解下几个问题. 1.百度收录的站点地图(sitemap)的格式.详情请查看该链接:查看 目前我只

  • C#使用windows服务发送邮件

    最近做了一个使用 C# 写了一个发送邮件的windows 服务,在这里记录一下. 首先使用 Visual Studio 2015 创建一个 windows 服务项目. 然后在设计器上面右击添加安装程序.如下图. 安装好后,选择安装程序设计界面,选择服务和安装程序右击选择属性修改一些属性值. PS:如果不给服务添加安装程序,后面是没法把服务安装至 windows 系统里的. 在数据库创建一个表,用于存储需要发送的邮件信息. create table MainInfo ( MainInfoID in

  • C#版Windows服务安装卸载小工具

    前言  在我们的工作中,经常遇到Windows服务的安装和卸载,在之前公司也普写过一个WinForm程序选择安装路径,这次再来个小巧灵活的控制台程序,不用再选择,只需放到需要安装服务的目录中运行就可以实现安装或卸载. 开发思路 1.由于系统的权限限制,在运行程序时需要以管理员身份运行 2.因为需要实现安装和卸载两个功能,在程序运行时提示本次操作是安装还是卸载  需要输入 1 或 2  3.接下来程序会查找当前目录中的可执行文件并过滤程序本身和有时我们复制进来的带有vhost的文件,并列出列表让操

  • c#创建windows服务(Windows Services)详细步骤

    Windows服务在Visual Studio 以前的版本中叫NT服务,在VS.net启用了新的名称.用Visual C# 创建Windows服务不是一件困难的事,本文就将指导你一步一步创建一个Windows服务并使用它.这个服务在启动和停止时,向一个文本文件中写入一些文字信息. 第一步:创建服务框架 要创建一个新的 Windows 服务,可以从Visual C# 工程中选取 Windows 服务(Windows Service)选项,给工程一个新文件名,然后点击 确定.你可以看到,向导向工程文

  • 使用C#创建Windows服务的实例代码

    本文介绍了使用C#创建Windows服务的实例代码,分享给大家 一.开发环境 操作系统:Windows 10 X64 开发环境:VS2015 编程语言:C# .NET版本:.NET Framework 4.0 目标平台:X86 二.创建Windows Service 1.新建一个Windows Service,并将项目名称改为"MyWindowsService",如下图所示: 2.在解决方案资源管理器内将Service1.cs改为MyService1.cs后并点击"查看代码&

  • C#启动windows服务方法的相关问题分析

    C#启动windows服务的方法都是什么呢?C#启动服务类型为Disabled的windows服务会遇到什么样的问题呢?那么本文就向你介绍C#启动windows服务的方法的相关内容. C#启动windows服务的方法是什么呢?来让我们开始吧: C#启动windows服务的由来:我们知道, 在C#代码中启动一个已经存在的windows服务,我们可以用这样的代码来完成: 复制代码 代码如下: //ACPI is an example of service name System.ServicePro

  • C#使用windows服务开启应用程序的方法

    本文实例讲述了C#使用windows服务开启应用程序的方法.分享给大家供大家参考.具体如下: 使用windows服务开启应用程序,会遇到如下问题 1.使用windows服务开启的应用程序不会显示应用程序界面 解决方法:当安装服务之后,选中服务,点击属性->登录,然后设置登录身份为本地系统账户,并允许服务与桌面进行交互 2.使用的是远程桌面进行查看,不会显示界面 解决方法:不能直接使用mstsc命令进入远程桌面,要使用mstsc /v:192.168.1.10 /admin命令 ,这里192.16

  • C#启动和停止windows服务的实例代码

    复制代码 代码如下: <script type="text/javascript">        function showLoading(desc) {            $("body").append("<div id=\"processingdiv\" style=\"display:none;\"><div class=\"popup\"> &l

  • C#通过创建Windows服务启动程序的方法详解

    本文实例讲述了C#通过创建Windows服务启动程序的方法.分享给大家供大家参考,具体如下: 1. 新建一个Windows服务应用程序 创建项目-->Visual C# 左侧的"+"-->Windows -->Windows 服务(右侧模板)-->输入名称,确定创建项目 2. 设置Windows服务的属性(Windows服务里没有窗体,所以点击左侧设计器里空白的地方即可在右侧属性栏里看到属性) 这里属性是控制服务器是否可以停止,暂停,继续等等的操作.根据需要选择

  • C#编写Windows服务程序详细步骤详解(图文)

    一.创建一个Windows Service 1)创建Windows Service项目 2)对Service重命名 将Service1重命名为你服务名称,这里我们命名为ServiceTest. 二.创建服务安装程序 1)添加安装程序 之后我们可以看到上图,自动为我们创建了ProjectInstaller.cs以及2个安装的组件. 2)修改安装服务名 右键serviceInsraller1,选择属性,将ServiceName的值改为ServiceTest. 3)修改安装权限 右键servicePr

  • c# 在windows服务中 使用定时器实例代码

    由于最近做自动执行的程序,开始做windows服务程序, 在windows服务中如何使用定时器的时候一直失效, 以前是直接拖入timer控件,但是不能直接运行,后来在网上找了一段程序,好使了. 复制代码 代码如下: //开始事件        protected override void OnStart(string[] args)        {             //定时事件            MyTimer();         } //结束事件        protect

  • C#编写Windows服务实例代码

    Microsoft Windows 服务(即,以前的 NT 服务)使您能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序.这些服务可以在计算机启动时自动启动,可以暂停和重新启动而且不显示任何用户界面.这使服务非常适合在服务器上使用,或任何时候,为了不影响在同一台计算机上工作的其他用户,需要长时间运行功能时使用.还可以在不同于登录用户的特定用户帐户或默认计算机帐户的安全上下文中运行服务. 使用Microsoft Visual Studio2012可以很方便的创建一个Windo

  • 基于C#实现Windows服务状态启动和停止服务的方法

    本文以实例形式展示了基于C#实现Windows服务状态启动和停止服务的方法.非常实用.分享给大家供大家参考之用.具体方法如下: 首先先引用: System.ServiceProcess.dll 然后在引用命名空间: using System.ServiceProcess; 建立服务对象: ServiceController sc = new ServiceController("Server"); 服务运行则停止服务: if (sc.Status.Equals(ServiceContr

  • c#开发的程序安装时动态指定windows服务名称

    这下可把我难住了,难道要 在开发的代码中一个一个地设置想要的名称,然后重新编译,再注册成服务? 但是如果将来又要换个名称呢?再重新设置. 编译.注册一遍?这样操作太麻烦了! 于是我就想能不能通过在安装的时候进行配置,比如加一个xml文件记录要安装的服务的服务名等信息,每次安装前修改该xml文件就可以了. 操作: 1.首先添加一个配置文件到服务主程序的根目录,取名"ServiceSetting.xml": 复制代码 代码如下: <?xml version="1.0&quo

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

    用c#中创建一个windows服务非常简单,与windows服务相关的类都在System.ServiceProcess命名空间下. 每个服务都需要继承自ServiceBase类,并重写相应的启动.暂停.停止等方法. windows服务的相关信息是存放与注册表中的,所以他可以在不需要用户登录的情况下自动运行,在c#中你不需要再直接向注册表中添加信息了,c#提供了服务安装类 ServiceProcessInstaller和ServiceInstaller来实现服务的安装. 首先,用vs创建一个win

随机推荐