从.net应用程序中的Windows任务计划程序捕获任务

时间:2009-03-14 19:51:38

标签: c# .net windows scheduled-tasks

我有一个在后台运行的程序,当发生特定的Windows事件时,必须通知该程序。

我知道事件的名称和ID,我知道如何在任务调度程序中为它安排操作,但在这里我只能启动一个新程序。我想在已经运行的应用程序中调用一个函数。

修改:像这样解决了。

主程序正在侦听TCP连接,并且从任务调度程序我使用命令行参数启动程序的另一个实例。如果程序收到此参数,它将连接到主程序,该程序在收到连接时执行某些操作。

3 个答案:

答案 0 :(得分:1)

我希望调度程序启动一个新进程(它可能是相同的应用程序exe)并让此进程设置第一个进程正在等待的事件。对我来说似乎很干净,特别是如果你让调度程序启动相同的应用程序(可能使用特殊的命令行)。

答案 1 :(得分:0)

我第二次(并且赞成)默里的评论。只需启动一个新的流程,“通知”事件发生的现有流程,然后死亡。如果你只是需要知道它正在等待一个全局事件(这个词的窗口意思,而不是.net的)似乎很简单。

答案 2 :(得分:0)

我不确定'windows event'是什么意思 - 有这么多!你在谈论标题中的任务调度程序,但是你在问题中写的内容似乎表明在调度程序的帮助下你正在寻找一些外部变化。我假设它不是键盘,鼠标或Windows事件,因为这是GUI框架的用途。

如果'胶水'申请方法不够优雅或不够快,我会说挖掘Windows Management Instrumentation。查看this article on MSDN以获取初学者,或许this one on how to work within VS:如果失败,您可能必须下降到COM Interop级别才能注册您的听众。

您尚未说明您的“后台应用程序”是如何实现的:无论是使用或不使用窗口/ GUI,还是作为Windows服务的正常流程,还是more modern。我认为WMI听众可以使用所有这些,但思考不能替代测试(反之亦然!)。

我提出这个建议有点犹豫:WMI基于DCOM,如果你开始在网络上工作,有时在一台机器(在不同的用户帐户下运行),这可能是后路的痛苦。我确信在所有神秘的参数和配置下面都有一个经过深思熟虑的安全模型!