当前位置:  编程技术>.net/c#/asp.net

C#开发Windows服务实例之实现禁止QQ运行

    来源: 互联网  发布时间:2014-10-23

    本文导语:  本实例主要实现下面三个基本功能 1、C#开发windows服务 2、禁止QQ等程序运行 3、为windows服务创建自动安装程序 下面针对这三个基本功能进行实现 一、C#开发windows服务 Windows服务在VS以前的版本中叫NT服务,在VS.NET启用了新的名...

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

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;
        }
    }

文件记录类代码

代码如下:

///
    /// 文件型日志记录
    ///
    public static class FileLog
    {
        private static string sFilePath = System.Configuration.ConfigurationSettings.AppSettings["UserLog"];
        ///
        /// 错误日志
        ///
        /// 错误内容
        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}rn", 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 { }
        }
        ///
        /// 正确日志
        ///
        /// 正确内容
        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}rn", 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
    {
        ///
        /// 应用程序的主入口点。
        ///
        [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.NETFrameworkv4.0.30319installutil.exe KillService.exe

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

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

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

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

%SystemRoot%Microsoft.NETFrameworkv4.0.30319installutil.exe /u KillService.exe

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

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

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

至此整个实例基本完成


    
 
 

您可能感兴趣的文章:

  • 请问在工作岗位的朋友!使用java开发的公司对c#的态度如何?
  • 希望了解java,能推荐一个好的开发工具和一本好的入门书籍吗?我以前直到现在都在用VC,接下来想在C#和java中选一个做为第二语言。
  • 使用C#开发Socket通讯的方法
  • 郁闷散分,最近换部门了,使用.net,c#开发,VSTS2005
  • php如何调用c#开发的dll类库?
  • PHP调用C#开发的dll类库方法
  • C# WinForm开发中使用XML配置文件实例
  • c#开发word批量转pdf源码分享
  • C# 开发圆角控件(窗体)的具体实现
  • C#开发纽曼USB来电小秘书客户端总结
  • c#开发的程序安装时动态指定windows服务名称
  • 使用VS2010 C#开发ActiveX控件(下),完整代码打包下载
  • 使用c#开发公众平台自定义菜单功能
  • c# AJAX实践VS2005 + RSSToolKit 开发你自己的RSS在线阅读器
  • C#开发之Socket网络编程TCP/IP层次模型、端口及报文等探讨
  • 使用VS2010 C#开发ActiveX控件(上)
  • LINUX 或者Windows 如何保证一个进程只有一个实例在运行?如果是C语言,JAVA语言开发,又怎么样保证?
  • Cocos2d-x UI开发之CCControlPotentiometer控件类使用实例
  • ThinkPHP的MVC开发机制实例解析
  • Cocos2d-x UI开发之CCControlSwitch控件类使用实例
  • destoon二次开发入门实例教程
  • Android用户界面开发之:TextView的使用实例
  • Cocos2d-x UI开发之CCControlColourPicker控件类使用实例
  • Cocos2d-x UI开发之CCControlSlider控件类使用实例
  • Cocos2d-x UI开发之CCControlButton控件类实例
  • Cocos2d-x UI开发之菜单类使用实例
  • Qt for Android开发实例教程
  • Cocos2d-x UI开发之场景切换代码实例
  • Drupal7 form表单二次开发要点与实例
  • Android开发之时间日期组件用法实例
  • Android开发之时间日期操作实例
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • VS2012+MySQL+SilverLight5的MVVM开发模式介绍
  • linux 嵌入式开发用不用买开发板,买什么样的开发板?
  • ios app 开发中ipa重新签名步骤介绍
  • docker中文入门学习手册 iis7站长之家
  • 几个windows平台C++开发错误举例
  • 请问在Linux 下用C开发移动增值软件都有什么开发工具啊,我以前一直在Windows下用VC开发
  • IOS开发:UIScrollView类介绍及如何简单地截获touch事件
  • 我常未开发过Linux下的程序,请问Linux下可以使用那些开发工具,最好的开发工具是什么版本?
  • nginx最新主线开发版1.5.4发布及下载地址
  • 我是学习web开发的,主要是java开发SSH开发框架和ajax等。我想知道有没有必要学习一下linux相关知识。
  • Web前端开发如何利用css样式来控制Html中的h1/h2/h3标签不换行
  • 各位设备驱动开发的朋友,请问,linux设备驱动开发和网络编程开发哪一样工资比较高呀?
  • ​基于Docker的大数据开发实践
  • Linux Kernel/Network 技术QQ群14888802,只加有内核开发、TCP/IP协议栈开发的程序员,不加新手和做应用开发的程序员。
  • Android及andriod无线网络Wifi开发的几点注意事项
  • 驱动程序开发和嵌入式开发有什么联系吗?
  • Linux 下c++开发error while loading shared libraries问题解决
  • linux 嵌入式开发用买开发板吗?
  • Android开发需要的几点注意事项总结
  • web开发和嵌入式开发哪个更有挑战
  • IOS开发之socket网络编程(基于SimpleNetworkStreams的c/s程序)
  • 请问在哪下载嵌入式Linux开发平台???想学嵌入式开发!!!


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3