C# 哪种应用程序最适合以非交互方式运行?

C# 哪种应用程序最适合以非交互方式运行?,c#,.net,C#,.net,我需要创建一个可以用批处理文件激活的应用程序 应用程序将接受文件名的单个字符串参数。然后,它将对该文件运行一些处理,并将另一个文件放到预定位置并退出 应用程序不需要与实际用户交互 我喜欢的平台是使用C#的.net 我最初计划编写一个控制台应用程序,但不确定这是否是最好的主意 完成这项任务的最佳方式是什么?有没有办法创建由批处理文件触发的windows服务?这是否更可取?Windows窗体项目更可取吗?如果它是非交互式的,控制台几乎肯定是最好的选择,因为你可以简单地把它放在后台,不用管它。选项一:

我需要创建一个可以用批处理文件激活的应用程序

应用程序将接受文件名的单个字符串参数。然后,它将对该文件运行一些处理,并将另一个文件放到预定位置并退出

应用程序不需要与实际用户交互

我喜欢的平台是使用C#的.net

我最初计划编写一个控制台应用程序,但不确定这是否是最好的主意


完成这项任务的最佳方式是什么?有没有办法创建由批处理文件触发的windows服务?这是否更可取?Windows窗体项目更可取吗?

如果它是非交互式的,控制台几乎肯定是最好的选择,因为你可以简单地把它放在后台,不用管它。

选项一:控制台应用程序。使用Windows计划程序在计划时间运行它。(推荐)


选项二:具有内置调度器或轮询器的Windows服务。

您当然可以创建一个Windows服务,监视要放置到特定文件夹中的文件。然后,批处理文件可以将文件放入该文件夹中


不过,我建议你找一个更好的理由这样做。扪心自问,“这比只运行控制台程序并指定文件名的批处理作业有什么好处?”

开发速度最快的可能是由Windows计划任务(或类似任务)触发的带有批处理文件的控制台应用程序

这样,您只需要开发应用程序本身的功能,而不需要提出一个调度框架

您还可以利用计划任务提供的功能,如日志记录、易于自定义的计划、错误报告等。Windows SchDedured任务的另一个选项可能是使用SQL Server计划作业,这也提供了良好的作业历史记录

综上所述,如果你沿着这条路走下去,你确实有额外的依赖关系,如果你编写自己的Windows服务,你也许可以消除这些依赖关系。
此外,如果部署是一个问题,那么使用安装程序编写Windows服务可以让您更好地控制安装过程。

使用FileSystemWatcher的Windows服务可以监视有问题的文件夹,而不是使用始终在线的控制台应用程序。这就是他们的目的,如果系统出现故障,你不必记得把文件放在电脑上,也不必把它放在你的windows启动系统中。只需将服务设置为自动启动。

我最喜欢的选择,也是我说服我的前雇主采纳的公司政策,如下所示:

所有服务器类型的应用程序都是在没有任何类型的直接连接UI的情况下编写的。无论它是作为控制台应用程序编译,还是作为windows应用程序编译,在设计阶段都是无关紧要的——对于.NET来说,区别在于翻转编译器开关。但是,一般来说,由于程序在没有直接人工干预的情况下运行,我们通常将其设计为作为服务运行——服务控制管理器负责启动和关闭,在应用程序失败时可以重新启动应用程序,并且在编写桌面应用程序时做了许多自己很难做到的事情

接下来,让服务器应用程序通过网络监听“管理员”的连接。此管理员连接是您的UI。SSL加密和身份验证之类的事情取决于您和您的公司,但在此基础上,我建议构建一个基于行的人类可读界面。这样,您可以使用telnet连接到它,并发出诸如“
显示连接”
”、“
删除用户52
”和“
重新启动
”等命令。任何类型的管理行为以及任何类型的状态和统计信息都应该使用此接口公开。首先,这有助于调试,其次,这将导致下一步

最后一次构建UI。可能是一个简单的。此UI的部分配置是指定要连接的主机和端口,以及任何身份验证位。UI应用程序连接到运行服务的机器,并通过网络管理界面发出命令,并解释结果。在我们公司,每个新UI都是一个管理单元模块,是一个更大项目的一部分。该项目将显示代表各种服务器及其状态的红色和绿色指示灯。单击服务器将允许您“深入”到该服务器,并检查其状态或配置的各个方面

虽然这个项目最初只是我在一两台服务器上的一个小程序,但它很快就发展到包括几十台服务器,每台服务器都运行一些服务,运行在不同的操作系统上,分布在世界各地的许多城市。这种简单的用户界面策略允许我们在一个座位上,或者在不同办公室的不同办公桌上,轻松跟踪和控制数百项此类服务

可伸缩性意味着不需要计算机前的人点击您编写的程序上的按钮