我需要创建一个可以使用批处理文件激活的应用程序。
应用程序将接受文件名的单个字符串参数。然后它将使用此文件运行一些处理,并将另一个文件放在预定位置并退出。
应用程序不需要与实际用户交互。
我首选的平台是使用C#的.net。
我最初计划编写一个控制台应用程序但不确定这是最好的主意。
完成此任务的最佳方法是什么?有没有办法创建一个由批处理文件触发的Windows服务?这更可取吗? Windows窗体项目会更合适吗?
答案 0 :(得分:3)
选项一:控制台应用。使用Windows Scheduler在计划时间运行它。 (推荐)
选项二:具有一些内置调度程序或轮询器的Windows服务。
答案 1 :(得分:3)
我最喜欢的选择,以及我说服我的前任雇主采用公司政策的选项如下:
所有服务器类型的应用程序都没有直接连接任何类型的UI。无论是作为控制台应用程序,作为Windows应用程序编译,还是在设计阶段都无关紧要 - 使用.NET,差异归结为翻转编译器开关。但是,一般情况下,由于程序在没有直接人工干预的情况下运行,我们通常将其设计为作为服务运行 - 服务控制管理器负责启动和关闭,可以在失败时重新启动应用程序,并且做了很多好事在编写桌面应用程序时,您自己很难做到的事情。
接下来,您让服务器应用程序通过网络侦听“admin”以进行连接。此管理员连接是您的UI。像SSL加密和身份验证这样的事情取决于您和您的公司,但在其基础上,我建议构建基于行的人类可读界面。这样您就可以使用telnet连接到它并发出“show connections
”,“drop user 52
”和“restart
”等命令。应使用此接口公开任何类型的管理行为以及任何类型的状态和统计信息。首先,这有助于调试,其次,它会导致下一步......
最后你建立了一个UI。一个简单的可能。此UI的部分配置是指定要连接的主机和端口,以及任何身份验证位。 UI应用程序连接到运行服务的计算机,并通过网络管理界面发出命令,并解释结果。在我们公司,每个新UI都是一个管理单元模块,作为大型项目的一部分。该项目将显示代表各种服务器及其状态的小红灯和绿灯。单击服务器将允许您“深入”到该服务器并检查其状态或配置的各个方面。
尽管该项目仅在一两台服务器上作为我的小程序启动,但它迅速发展为包括几十台服务器,每台服务器运行少量服务,运行在不同的操作系统和世界各地的许多城市。这种简单的用户界面政策使我们能够从一个座位轻松跟踪和控制数百种服务,或同时在不同办公室的不同办公桌上进行跟踪和控制。
可伸缩性意味着不要求计算机前的某个人按下您编写的程序上的按钮。
答案 2 :(得分:1)
开发最快的事情可能是一个控制台应用程序,带有批处理文件,由Windows计划任务(或类似的东西)触发。
这样,您只需要开发应用程序本身的功能,而不是提出调度框架。
您还可以利用计划任务提供的功能,例如日志记录,轻松自定义的计划,错误报告等.Windows Schdeduled任务的另一个选项可能是使用SQL Server计划作业,这也提供了一个很好的工作历史。
所有这一切,如果你沿着这条路走下去,你确实有额外的依赖关系,如果你自己编写了Windows服务,你可能会消除它们。 此外,如果部署是一个问题,那么使用安装程序编写Windows服务可以更好地控制安装过程。
答案 3 :(得分:0)
如果它是非交互式的,那么控制台几乎肯定是要走的路,因为你可以简单地把它放在后台并且不管它。
答案 4 :(得分:0)
您当然可以创建一个Windows服务来监视要放入特定文件夹的文件。然后,批处理文件可以将文件放入该文件夹中。
我建议您找到更好的理由来做到这一点。问问自己,“这比仅运行Console程序并指定文件名的批处理作业更好”?
答案 5 :(得分:0)
带有FileSystemWatcher的Windows服务,用于监视相关文件夹,而不是永远在线的控制台应用程序。这就是它们的用途,如果系统出现故障,您不必记住打开文件,也不必将它放在Windows启动中。只需将服务设置为自动启动即可。