【问题标题】:Catch tasks from windows task scheduler in a .net app在 .net 应用程序中从 Windows 任务调度程序捕获任务
【发布时间】:2010-10-13 09:26:57
【问题描述】:

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

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

编辑:这样解决了。

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

【问题讨论】:

    标签: c# .net windows scheduled-tasks


    【解决方案1】:

    我不确定您所说的“windows 事件”是什么意思——实在太多了!您在标题中谈论任务调度程序,但您在问题中所写的内容似乎表明您在调度程序的帮助下正在寻找一些外部更改。我假设它不是键盘、鼠标或 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,如果您开始跨网络工作,有时在一台机器上(在不同的用户帐户下运行),这可能会给您带来麻烦。我敢肯定,在所有神秘的参数和配置之下,有一个经过深思熟虑的安全模型!

    【讨论】:

    • “事件”是我可以在 Windows 任务计划程序中创建的任务。更具体地说,在计算机进入睡眠模式之前。该应用程序是一个普通的 .exe 进程。
    【解决方案2】:

    我赞同(并赞成)默里的评论。只需启动一个新进程,该进程“通知”事件发生的现有进程然后终止。如果您只需要知道它在等待全局事件时发生(windows 的意思,而不是 .net 的)似乎很简单。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2012-04-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-06
        • 1970-01-01
        • 2011-01-10
        • 2021-07-20
        • 2014-01-23
        相关资源
        最近更新 更多