Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在特定时间运行windows服务_C#_Windows - Fatal编程技术网

C# 在特定时间运行windows服务

C# 在特定时间运行windows服务,c#,windows,C#,Windows,是否可以将windows服务设置为在特定时间运行 范例 From 8:00 am to 5:00pm run process From 5:00 pm to 8:00am run process 此过程可以每天、每周或一天运行 请让我知道您的想法通常,如果这是您的需求,您最好编写一个简单的控制台应用程序,然后根据需要使用调度 这将提供与服务相同的好处,但允许您在部署后对调度进行更多的控制。有几种方法可以实现这一点。从编码的角度来看,最简单的方法是编写一个控制台应用程序,然后使用任务调度器运行

是否可以将windows服务设置为在特定时间运行

范例

From 8:00 am to 5:00pm run process 
From 5:00 pm to 8:00am run process
此过程可以每天、每周或一天运行


请让我知道您的想法通常,如果这是您的需求,您最好编写一个简单的控制台应用程序,然后根据需要使用调度


这将提供与服务相同的好处,但允许您在部署后对调度进行更多的控制。

有几种方法可以实现这一点。从编码的角度来看,最简单的方法是编写一个控制台应用程序,然后使用任务调度器运行它

windows服务始终在运行,因此您希望您的服务睡眠一段时间,唤醒检查当前时间是否在窗口中,然后执行


这两种方法都有各自的优缺点,实际上更多的是关于服务的功能。我不知道答案的一个问题是,如果调度任务的用户未登录,调度任务是否会运行。这将是我最担心的任务调度方法。

我遇到了类似的情况,我必须开发一项服务,该服务只能在交易时间内执行某些操作,在特定情况下,交易时间为每天上午11:00到下午3:00。这一天剩下的时间都是闲置的。我正在分享我在我的案例中所做的事情。我不确定这对你是否有帮助,但我希望会有帮助

维持开始时间和结束时间的两个变量

TimeSpan StartingTime = new TimeSpan(
                             Int32.Parse(
                               ConfigurationManager
                                  .AppSettings["StartingTimeHour"]), 
                             Int32.Parse(
                               ConfigurationManager
                                   .AppSettings["StartingTimeMinute"]), 0);
TimeSpan EndingTime = new TimeSpan(
                             Int32.Parse(
                               ConfigurationManager
                                   .AppSettings["EndingTimeHour"]), 
                             Int32.Parse(
                               ConfigurationManager
                                   .AppSettings["EndingTimeMinute"]), 0);
//Starting time and Ending time may change in future. So I used app.config 
//instead of fixing them to (11,0,0) and (15,0,0) respectively
检查是否为交易时间的方法

public bool TradingTime()
{                        
    TimeSpan CurrentTime = DateTime.Now.TimeOfDay;
    return ((CurrentTime > StartingTime) && (CurrentTime < EndingTime));            
}

您可以使用Windows任务计划程序创建一个任务来启动服务,并创建另一个任务来停止服务。您所需要做的就是创建一个批处理文件来启动和停止服务

启动服务示例:

net start MyService
示例停止服务

net stop MyService

嗨,伙计们,谢谢你们的快速回复。。所有的建议看起来都很好。。但在开始之前,我想与大家分享一下我的应用程序的场景。。该程序将在24/7*场景1从上午8:00到下午5:00运行。如果文件夹包含一些文件,应用程序将检查几个文件夹并扫描它们。。该程序将创建一封电子邮件,附加所有文件,并将在下午5:00至上午8:00发送给用户A*场景2。将执行相同的过程,但使用此场景的不同用户,我可以使用您的建议吗?如果是不同的用户,我想您确实希望执行计划任务。否则,你将打开一个关于管理身份的虫子罐——它会很快变得丑陋。你可以通过投票表决我的答案和/或将其标记为答案来感谢我。已经这么做了。。我想。。我点击“是”来回答这个问题“这篇文章对你有用吗?”嗨,伙计们,谢谢你们的快速回复。。所有的建议看起来都很好。。但在开始之前,我想与大家分享一下我的应用程序的场景。。该程序将在24/7*场景1从上午8:00到下午5:00运行。如果文件夹包含一些文件,应用程序将检查几个文件夹并扫描它们。。该程序将创建一封附加所有文件的电子邮件,并将在下午5:00至上午8:00发送给用户A*场景2。将执行相同的过程,但使用此场景的不同用户,我可以使用您的建议吗?@link视情况而定-如果您希望服务持续监视文件夹,那么最好在服务中使用
FileSystemWatcher
,并持续监视它。如果您想让它在正常时间运行,那么任务计划程序是一个不错的选择,因为它可以让您轻松更改计划…您可以使用
Int32.TryParse(string,out int)
方法将字符串转换为整数<如果字符串格式不正确、参数为null或字符串包含大整数,Parse方法将引发异常。但是在这种情况下,
Int32.TryParse
将不会通过异常。如果字符串无法转换为整数,它将返回
false
,否则它将返回
true
,第二个参数将包含整数值。但是,如果您需要自己处理上述所有异常情况,然后你可以使用
Int32.Parse
方法,用适当的
try…catch
块包装,并为它们显示适当的消息。谢谢@Sayem,你可以编辑我的答案并将
Int32.TryParse(string,out int)
而不是
Int32.Parse
方法。
net stop MyService