Visual C#中调用Windows服务初探

2016-02-19 16:16 23 1 收藏

只要你有一台电脑或者手机,都能关注图老师为大家精心推荐的Visual C#中调用Windows服务初探,手机电脑控们准备好了吗?一起看过来吧!

【 tulaoshi.com - 编程语言 】

  Windows服务是独立于登录用户而工作的Windows应用程序,它通常在计算机启动时开始执行,且常常连续执行,直到计算机关闭为止。像Exchange Server,IIS和杀毒软件等都使用这种方式,这样就可以独立于某一用户而且可以在任何用户登录前来运行,同时也可以服务于所有的进程,从而以一种服务的形式存在。

  正因为Windows服务有着这么多的特性,因此,当需要一些特殊功能的时候就可以考虑使用Windows服务来解决问题。比如下面我们要做的这个例子。对于我们这些程序设计人员,计算机是在一起工作时间最长的伙伴,每天都会对着它的屏幕八个小时以上,还不包括下班后在家打游戏的时间,因此,保护眼睛是最重要的了。问题的起因

  Windows服务就做完了,余下的就是要测试了,但发现这个EXE无法运行,它会提示你该EXE需要使用安装程序来安装服务,看来不可能写一个程序就算是Windows服务了,还要把它注册到Windows才行。

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

  接下来,右击CareEye.cs的设计视图,添加安装程序,(VS.NET想得就是挺周到的),这下又出来一批代码,不过好在不用改代码了,只要把Account的账户类型设成LocalSystem,把StartType设成手动启动就行了,这里用手动是为了方便调试,以后可以改成自动类型。

  编译完后,还是无法运行,此处还需要一步,就是运行installutil来安装这个服务,其安装和卸载的用法为:

  

installutil CareEye.exeinstallutil /u CareEye.exe 

  安装完后能过系统的服务管理器你就可以看到你的服务了,只要点击启动就可以把它启动,把时间向前改一个小时它就会提醒你需要休息了,呵呵,够简单了吧。

  如果你想制作成安装包分发给自己的朋友,只需要再添加个部署项目就行了,不过为了完成自注册,要在自定义操作编辑器中的安装阶段添加一个自定义的安装操作,把InstallerClass属性设成TRUE即可。

  余下的事情,就是自己动手试试吧,这回不用担心用眼超时了!

  以下是careeye.cs的源程序:

  

using System;using System.Collections;using System.ComponentModel;using System.Data;using System.Diagnostics;using System.ServiceProcess;using System.Threading;using System.Windows.Forms;namespace CareEye{ public class CareEye : System.ServiceProcess.ServiceBase {  private Thread MainThread;  /// summary  /// 必需的设计器变量。  /// /summary  private System.ComponentModel.Container components = null;  public CareEye()  {   // 该调用是 Windows.Forms 组件设计器所必需的。   InitializeComponent();   // TODO: 在 InitComponent 调用后添加任何初始化   MainThread=new Thread(new ThreadStart(ThreadFunc));   MainThread.Priority=ThreadPriority.Lowest;  }  // 进程的主入口点  static void Main()  {   //System.ServiceProcess.ServiceBase[] ServicesToRun;   // 同一进程中可以运行多个用户服务。若要将   //另一个服务添加到此进程,请更改下行   // 以创建另一个服务对象。例如,   //   // ServicesToRun = New System.ServiceProcess.ServiceBase[] {new CareEye(), new MySecondUserService()};   //   //ServicesToRun = new System.ServiceProcess.ServiceBase[] { new CareEye() };   System.ServiceProcess.ServiceBase.Run(new CareEye());  }  /// summary  /// 设计器支持所需的方法 - 不要使用代码编辑器  /// 修改此方法的内容。  /// /summary  private void InitializeComponent()  {   //   // CareEye   //   this.ServiceName = "CareEye";  }  /// summary  /// 清理所有正在使用的资源。  /// /summary  protected override void Dispose( bool disposing )  {   if( disposing )   {    if (components != null)    {     components.Dispose();    }   }   base.Dispose( disposing );  }  /// summary  /// 设置具体的操作,以便服务可以执行它的工作。  /// /summary  protected override void OnStart(string[] args)  {   // TODO: 在此处添加代码以启动服务。   MainThread.Start();  }  /// summary  /// 停止此服务。  /// /summary  protected override void OnStop()  {   // TODO: 在此处添加代码以执行停止服务所需的关闭操作。   MainThread.Abort();  }  public static void ThreadFunc()  {   int LastHour=DateTime.Now.Hour;   while (true)   {    System.Threading.Thread.Sleep(60000);    if (DateTime.Now.Hour-1==LastHour)    {     MessageBox.Show("为了爱护您的眼睛,请您暂时休息5分钟并向远处眺望!","警告",MessageBoxButtons.OK,MessageBoxIcon.Warning,MessageBoxDefaultButton.Button1,MessageBoxOptions.DefaultDesktopOnly);LastHour=DateTime.Now.Hour;    }   }  } }} 

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

来源:https://www.tulaoshi.com/n/20160219/1611502.html

延伸阅读
可能大家都知道dataview这个名词的概念,但也许不是很多人可以说清楚在.net架构中它的应用范围和程度。比如:究竟datagrid和repeater这些控件是如何和数据关联起来的?很多人会告诉我是通过dataset。这显然是正确的,但究竟最根本最直接的是通过什么联系起来的呢? 答案就是dataview。其实下面的语句: DatagridTC.DataSource ...
青苹果工作室2001年04月27日 17:58 Windows服务在Visual Studio 以前的版本中叫NT服务,在VS.net启用了新的名称。用Visual C# 创建Windows服务不是一件困难的事,本文就将指导你一步一步创建一个Windows服务并使用它。这个服务在启动和停止时,向一个文本文件中写入一些文字信息。这个小技巧来自于MSDN,但是现在程序编写的更加清晰,并且你可...
信使服务是Windows 2000/XP下面的一种通信服务,通过它我们可以在网上象QQ一样进行实时的交流,但和QQ不同的是信使服务不需要拥有一个号码,它只要知道对方的IP地址--如果在局域网中,只要知道对方的计算机名就可以了。我们可以利用"net send"在命令行下面发送消息,也可以通过"控制面板-管理工具-计算机管理"中的"操作"菜单里面的"所有任...
我们知道C#和C++的差异之一,就是他本身没有类库,所使用的类库是.Net框架中的类库--.Net FrameWork SDK。在.Net FrameWork SDK中为网络编程提供了二个名称空间:"System.Net"和"System.Net.Sockets"。C#就是通过这二个名称空间中封装的类和方法实现网络通讯的。 首先我们解释一下在网络编程时候,经常遇到的...
在网络环境下,我们最感兴趣的两个命名空间是System.Net和System.Net.Sockets。System.Net命名空间通常与较高程的操作有关,例如download或upload,试用HTTP和其他协议进行Web请求等等,而System.Net.Sockets命名空间所包含的类通常与较低程的操作有关。如果要直接使用Sockets或者TCP/IP之类的协议,这个命名空间的类是非常有用的。 ...

经验教程

960

收藏

79
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部