第一个任务--C# Windows服务(三)
2020-12-13 02:21
标签:c style class blog code java 最后就剩下设定时间和部署项目了 我的服务进入系统的时候是自启动的,但是如果电脑打开以后这周不是周五那它根本就没有存在的意义,所以要写一个停止服务的方法: 在Elapsed事件中写入: 这样写虽然有点折腾,但是我心里舒服... 虽然Timer耗不了什么性能,但是我也不愿意让它做太多无效的计数,另外我发现,就算服务停止了,弹出的窗口也不会关掉,这应该是系统自行发出的指令,跟服务无关,感叹大神的能力就是不一样。 现在程序写好了,把我生成好的服务还有最初做的两个“安装启动服务”和“卸载服务”的bat打包发给老大就能交差了。 但是我联系他,他却不睬我。妈蛋,什么领导,叫我做东西我做好了,你至少回应我一下吧,就算不说“让同事们都装上吧”,好歹说一句“蛮好的”,“不错”之类的话吧。 居然连一句话都没有,拿我当猴耍啊。唉,反正我也是为了练技术才来实习的,不计较那么多了。 之后又闲下来了,我就开始考虑这个服务能不能改进一下,我给别人一个压缩文件还得解压,然后双击bat...一般的电脑用户都不会知道什么是bat吧,看起来也不够档次啊,而且这个弊端也不少,例如服务的路径不能放到含有中文的目录下,不然bat文件可能取不到路径,再例如总需要用管理员权限运行,很容易忽略等等。 要是能把这个打包成一个安装程序多好,
像我们用过的软件那样,一路“下一步”,安装完成!感觉高端多了,而且安装完后服务自动安装启动,全自动一条龙啊有木有?! 然后我就去网上找到了一些关于安装项目的教程,还真有不少,具体的创建过程我就不说了,网上很多资料可查。 说几点关键的,第一,安装项目里比较主要的就两个东西,一个是文件系统,另一个是自定义操作。 文件系统就是确定你要安装的东西,自定义操作就是在不同的状况下要干的事 第二,在自定义操作里添加自定义操作“主输出来自(WeeklyReport)(活动)”(这是我的项目)这个之后,生成安装程序后就可以看到服务被安装上了,但是没启动,怎么让它在安装后自动启动呢?我们需要在解决方案中新添加一个类库“CustomAction”,然后在这个类库里也添加一个安装程序MyInstallerClassDll.cs,在里面添加如下代码: 把这个CustomAction也添加到文件系统中,再在自定义操作里添加它--“主输出来自(CustomAction)(活动)”。 注意尽量每个文件夹里都添加上这些项目输出,否则安装过程可能会报错。 好了,生成安装程序,我们现在运行一下: OK,非常Nice,可以看到服务已经在跑了 再试试卸载: 恩,也蛮好的,是不是一下觉得厉害多了,哈哈,我自己倒觉得还不错。 总之这个小程序写到这里就算是告一段落了,以后如果有时间还会再改良一下,或者加入一些新的功能。 第一个任务--C# Windows服务(三),搜素材,soscw.com 第一个任务--C# Windows服务(三) 标签:c style class blog code java 原文地址:http://www.cnblogs.com/Chump-Monkey/p/3763569.html///
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();
}
}
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();
}
}