gpt4 book ai didi

c# - .Net 应用程序的 Windows 任务计划程序与 Windows 服务

转载 作者:太空宇宙 更新时间:2023-11-03 10:52:01 25 4
gpt4 key购买 nike

关闭。这个问题是opinion-based .它目前不接受答案。












想改进这个问题?更新问题,以便 editing this post 可以用事实和引用来回答它.

8年前关闭。




Improve this question




我知道已经问过这个主题的变体,但这是我的情况:

我有大约 30 个 FTP 接口(interface)应用程序。每个界面都有自己的要求和配置,但基本上它从源服务器下载文件 - 有时每天,有时每分钟(有些,甚至可能在几秒钟内安排)

对于我最初的开发,我编写了一个 C# 类库来完成所有的 FTP 工作。此应用程序(无论是控制台应用程序还是 Windows 服务)很可能在 Windows Server 2012 下运行。

现在是下一部分,我正在尝试在以下之间做出决定:

1) Writing a console app (or a powershell script?) that takes command line inputs plus a configuration file for each interface. I would schedule this using Windows Task Scheduler. For deployment of these interfaces, I could create a batch file that uses the “schtasks.exe” to create and configure the task. One task for each interface. Sounds easy peasy…



或者

2) Write a windows services application… but here, I am confused. Do I create and install a service for each one of my interfaces? (i.e. only thing different might be the config file). Or, do I create a a main service that spawns off threads for each interface defined in a single config file?

If I did this as a single service, how do I manage the maintenance/deployment of this? If I stop the service, would it not affect all the interfaces? And how do I perform the actual scheduling? I’ve read the suggestion is to use Quartz.Net scheduler or just .Net Timers.



---

一些额外的想法:
以下是有关 StackOverflow 的一些阅读 Material ,它们提出了这些主题/担忧:

windows service vs scheduled task
Scheduled console app vs Windows service? When is it appropriate to use each

任务计划程序问题
  • 列表项
  • 可能需要登录? (我读过这不是真的)
  • 关于机器管理员密码更改的问题(我读过这不是真的)
  • 在高权限帐户(NetworkService、LocalSystem 或用户)中运行的问题
  • 多个进程/长时间运行的事务的问题
    这对我来说真的很糟糕,例如,如果两个进程试图下载(和删除)同一个源 FTP 文件。
  • 许多人的经验是,它不如 Windows 服务稳定/可靠,尤其是在 Windows7 之前的早期操作系统上
  • 较少的基础架构支持(例如重试、监控等的故障策略)
  • 在几秒钟内安排时的担忧...

  • Windows 服务问题
  • 列表项
  • 定时器的潜在问题
  • 更复杂

  • 控制台应用程序 + 计划任务问题
  • 列表项
  • 无法在后台运行 - 因此托管服务器将启动命令提示符
    这是一个严重的问题。如果我有 30 个 FTP 接口(interface),并且每个接口(interface)都计划每分钟/小时运行一次,那就是很多窗口!!!
  • 我该如何解决这个问题?改用 PowerShell 脚本?

  • 期待一些反馈和示例代码/脚本,如果相关也非常感谢。

    谢谢

    最佳答案

    您可以使用在 powershell 中访问您的 c# 类add-type[System.Reflection.Assembly] - 查看此 SO 帖子以获取示例 - Can I access My Custom .NET Class from PowerShell?

    您可以使用 start-job 在 powershell 中完成所有操作等等,但是你的控制脚本将需要很多努力。

    我很想使用 Powershell 的内置(版本 3)cmdlet 来创建/修改任务计划程序和自定义触发器中的计划作业 - http://blogs.technet.com/b/heyscriptingguy/archive/2012/09/18/create-a-powershell-scheduled-job.aspx

    让它安排运行 .ps1 powershell 脚本的作业,一个用于每个传输或一组相关传输,例如Monthly_Payroll_xfer.ps1 , Weekly_Expenses_xfer.ps1具有与该转移相关的逻辑,成功/失败的电子邮件警报等。

    唯一不能解决的问题是同时处理相同的文件/目标,但如果它们已经在运行,您可能会在启动时检查各个脚本 - 请参阅这篇文章的已接受答案 - Assure only 1 instance of PowerShell Script is Running at any given Time

    至于windows提示,您可以以未登录用户的身份运行计划任务,并且您不会看到powershell命令窗口,因为它们将在不同的控制台上 - 请务必不要设置-noexit powershell.exe 的开关,因此它们在完成后会消失。

    必须在工作中为仅作为 GUI 而不是作为服务运行并且不能被 srvany 操纵的工具执行此操作等 - 我们设置了一个计划任务,它作为服务帐户运行(在启动时)并运行一个运行 GUI.exe 的 powershell 脚本

    然后我们使用powershell脚本来stop-process要杀死它,禁用/启用任务(如禁用/启用服务)并运行任务。

    这是一个杂物,但它有效。

    抱歉,我没有提供太多代码示例,在我的手机上执行此操作,但可能会给您一些想法。

    您也可以在 c# 中完成这一切 - 我们有一个内部开发的应用程序,它带有 SQL 后端,它完全可以完成您想要实现的目标,非常成功,多线程,并且处理量非常大。

    然而,我的雇主的知识产权和其他政策阻止我分享更多关于它的信息:-(

    关于c# - .Net 应用程序的 Windows 任务计划程序与 Windows 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21124037/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com