第一个任务--C# Windows服务(三)

最后就剩下设定时间和部署项目了

我的服务进入系统的时候是自启动的,但是如果电脑打开以后这周不是周五那它根本就没有存在的意义,所以要写一个停止服务的方法:


/// <summary>
/// 停止Windows服务
/// </summary>
public static void StopmyService()
{
  try
  {
    string m_ServiceName = "WeeklyReport";
    ServiceController service = new ServiceController(m_ServiceName);
    if (service.Status != ServiceControllerStatus.Stopped &&
    service.Status != ServiceControllerStatus.StopPending) //若该服务不是停用状态,才将其停止
    {
      service.Stop();
    }
  }
  catch (Exception E)
  {
    throw new Exception("服务无法停用");
  }
}

在Elapsed事件中写入:


private void TimeMachine_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
//初始1秒触发一次
if (DateTime.Now.DayOfWeek == DayOfWeek.Friday)
{
//如果判断服务打开的时间为14点之前,那么改为1小时触发一次
if (DateTime.Now.Hour < 14)
{
TimeMachine.Interval = 3600000D;
}
if (DateTime.Now.Hour == 14 && DateTime.Now.Minute >= 00 && DateTime.Now.Minute < 59) //14点之后改为30秒触发一次
{
TimeMachine.Interval = 30000D;
}
//快到15点时,改为1秒触发一次
if (DateTime.Now.Hour == 14 && DateTime.Now.Minute == 59 && (DateTime.Now.Second >= 30 && DateTime.Now.Second < 60))
{
TimeMachine.Interval = 1000D;
}
if (DateTime.Now.Hour == 15 && DateTime.Now.Minute == 0)
{
Interop.ShowMessageBox("今天,你交周报了吗? 恩?", "友情提示");
//停止
StopmyService();
}
if (DateTime.Now.Hour > 15 || (DateTime.Now.Hour == 15 && DateTime.Now.Minute > 0)) //提醒以后自动停止服务
{
StopmyService();
}
}
else
{
//如果不是周五,启动1秒后自动停止服务
StopmyService();
}
}

这样写虽然有点折腾,但是我心里舒服...

虽然Timer耗不了什么性能,但是我也不愿意让它做太多无效的计数,另外我发现,就算服务停止了,弹出的窗口也不会关掉,这应该是系统自行发出的指令,跟服务无关,感叹大神的能力就是不一样。

现在程序写好了,把我生成好的服务还有最初做的两个“安装启动服务”和“卸载服务”的bat打包发给老大就能交差了。

但是我联系他,他却不睬我。妈蛋,什么领导,叫我做东西我做好了,你至少回应我一下吧,就算不说“让同事们都装上吧”,好歹说一句“蛮好的”,“不错”之类的话吧。

居然连一句话都没有,拿我当猴耍啊。唉,反正我也是为了练技术才来实习的,不计较那么多了。

之后又闲下来了,我就开始考虑这个服务能不能改进一下,我给别人一个压缩文件还得解压,然后双击bat...一般的电脑用户都不会知道什么是bat吧,看起来也不够档次啊,而且这个弊端也不少,例如服务的路径不能放到含有中文的目录下,不然bat文件可能取不到路径,再例如总需要用管理员权限运行,很容易忽略等等。

要是能把这个打包成一个安装程序多好,
像我们用过的软件那样,一路“下一步”,安装完成!感觉高端多了,而且安装完后服务自动安装启动,全自动一条龙啊有木有?!

然后我就去网上找到了一些关于安装项目的教程,还真有不少,具体的创建过程我就不说了,网上很多资料可查。

说几点关键的,第一,安装项目里比较主要的就两个东西,一个是文件系统,另一个是自定义操作。

文件系统就是确定你要安装的东西,自定义操作就是在不同的状况下要干的事

第二,在自定义操作里添加自定义操作“主输出来自(WeeklyReport)(活动)”(这是我的项目)这个之后,生成安装程序后就可以看到服务被安装上了,但是没启动,怎么让它在安装后自动启动呢?我们需要在解决方案中新添加一个类库“CustomAction”,然后在这个类库里也添加一个安装程序MyInstallerClassDll.cs,在里面添加如下代码:


        public override void Commit(IDictionary savedState)
{
base.Commit(savedState);
//Auot start service after the installation is completed
ServiceController sc = new ServiceController("WeeklyReport");
if (sc.Status.Equals(ServiceControllerStatus.Stopped))
{
sc.Start();
}
}

把这个CustomAction也添加到文件系统中,再在自定义操作里添加它--“主输出来自(CustomAction)(活动)”。

注意尽量每个文件夹里都添加上这些项目输出,否则安装过程可能会报错。

好了,生成安装程序,我们现在运行一下:

OK,非常Nice,可以看到服务已经在跑了

再试试卸载:

恩,也蛮好的,是不是一下觉得厉害多了,哈哈,我自己倒觉得还不错。

总之这个小程序写到这里就算是告一段落了,以后如果有时间还会再改良一下,或者加入一些新的功能。

时间: 2024-08-17 22:58:50

第一个任务--C# Windows服务(三)的相关文章

第一个任务--C# Windows服务(二)

好不容易装上了,又得把服务卸掉,好吧,我们开始编写这个服务. 首先这是一个周报提醒工具,主要功能就是提醒,用何种方式呢? 弹窗呗. 这个工具肯定和时间有关的,因为它需要到点报时,周报一般是周末交嘛,就定成周五下午3点吧. 这样思路就清晰了,我要做的就是一个每周五下午三点会弹窗的一个小程序. 恩...可是往哪里添代码呢... 于是打开Service的代码编辑器,发现有一个OnStart方法和一个OnStop方法,这是什么呢?他们就是启动服务和停止服务时要进行的操作. 下面我们要进行时间的判断,我想

C# 使用vs2013 写 windows服务

第一步:添加windows服务项目 并起一个 好看的名字 第二步:添加安装程序 第三步:右键点击serviceProcessInstaller1属性,在Account中选择LocalSystem 第四步:右键点击serviceInstaller1 属性,在serviceName修改自己服务需要的名称 第五步:点击ServerTest选择查看代码 OnStart 是服务启动时 会运行的 启动方法  我们一般会用一个线程去定义 OnStop 是 服务停止时 会运行的方法,一般写一些 资源回收的方法

【先定一个小目标】Redis 安装成windows服务-开机自启

1.第一步安装成windows服务的,开机自启动 redis-server --service-install redis.windows.conf 2.启动\关闭 redis-server --service-start redis-server --service-stop 3.可安装多个实例 redis-server --service-install –service-name redisService1 –port 10001 redis-server --service-start

c# windows 服务学习

用C#做windows服务变得简单对了===按照下面步骤来就行了用C#创建Windows服务(Windows Services)例子服务功能:这个服务在启动和停止时,向一个文本文件中写入一些文字信息. 第一步:创建服务框架 要创建一个新的 Windows 服务,可以从Visual C# 工程中选取 Windows 服务(Windows Service)选项,给工程一个新文件名,然后点击 确定.你可以看到,向导向工程文件中增加WebService1.cs类:其中各属性的含意是: Autolog 是

win7 删除Windows服务的方法

一.什么是Windows服务 Windows服务也称为Windows Service,它是Windows操作系统和Windows网络的基础,属于系统核心的一部分,它支持着整个Windows的各种操作.诸如DNS客户端.打印程序.Windows更新服务.计划任务.Windows时间服务等服务,它们关系到机器能否正确运行.如果不能适当地管理这些服务,就会影响到机器的正常操作. 一个服务首先是一个Win32可执行程序,或者是是rundll32.exe来运行一个.dll的方式形成的进程.跟普通应用程序不

ASP.NET MVC 中应用Windows服务以及Webservice服务开发分布式定时器

ASP.NET MVC 中应用Windows服务以及Webservice服务开发分布式定时器一:闲谈一下:1.现在任务跟踪管理系统已经开发快要结束了,抽一点时间来写一下,想一想自己就有成就感啊!!  2.关于任务跟踪管理系统项目中遇到的Windows服务以及Webservice的综合应用的问题. 大家好这是我第二次写博客 ,写的不好请大家多多谅解, 希望大家可以多多指正. 二:我稍微的整理了一下关于这个分布式定时器需求:1.根据任务跟踪管理系统中的数据库的AnswerSheet 表格中找到客户编

C# 6 与 .NET Core 1.0 高级编程 - 39 章 Windows 服务(上)

译文,个人原创,转载请注明出处(C# 6 与 .NET Core 1.0 高级编程 - 39 章 Windows 服务(上)),不对的地方欢迎指出与交流. 章节出自<Professional C# 6 and .NET Core 1.0>.水平有限,各位阅读时仔细分辨,唯望莫误人子弟. 附英文版原文:Professional C# 6 and .NET Core 1.0 - Chapter 39 Windows Services --------------------------------

编写Windows服务疑问1:操作过程

Windows 服务开发平时不太受人关注,毕竟那是高大上的项目类型,平常需求也用不上,很多老掉牙的家伙也只知有WinForm,仍不知有WPF,更别说Windows 服务了,正如淘渊明所写的,“不知有汉,无论魏晋”. 通常,就算要让程序开机启动,多数也只考虑设置一个启动项,也很少去想到开发Windows服务.如果程序需要自动启动,并且希望在后台完成一些东东,其实使用Windows服务也不错的. 正因为用的人少,那么说的人更少了,使得不了解它,想学又找不到资料的人也多.没事,老周没什么资本,唯一值得

如何删除windows服务(sc.exe删除和注册表删除两种方法)

一.什么是Windows服务 Windows服务也称为Windows Service,它是Windows操作系统和Windows网络的基础,属于系统核心的一部分,它支持着整个Windows的各种操作.诸如DNS客户端.打印程序.Windows更新服务.计划任务.Windows时间服务.告警器等服务,它们关系到机器能否正确运行.如果不能适当地管理这些服务,就会影响到机器的正常操作.    一个服务首先是一个Win32可执行程序,或者是是rundll32.exe来运行一个.dll的方式形成的进程.跟