代码之家  ›  专栏  ›  技术社区  ›  mic.sca

有关Windows应用程序上批处理文件的可能替换的问题?

  •  3
  • mic.sca  · 技术社区  · 17 年前

    我有一个大型Windows遗留应用程序,由许多与数据库交互的可执行文件组成。 可执行文件有4个主要用途:

    (a) 在数据库上解析和加载文件

    (b) 转换文件(例如编码文件。)t这也可以将文件拆分为多个部分。

    (c) 在数据库中执行某种复杂的更新

    (d) 产生文件

    (1) 等待一个条件,从某个外部路径获取一个文件,可能使用(b)进行转换,执行(c),发送有关活动结果的通知,将记录写入数据库

    (2) 等待条件,执行一些(c),生成一个文件,用(b)进行转换,然后将其复制到一个或多个目标(本地文件、数据库、ftp),发送有关活动结果的通知,将记录写入数据库。

    (3) 协调(a-b-c-d)可执行文件的其他复杂序列,发送有关活动结果的通知,向数据库写入记录

    问题是:

    -批处理文件不容易为测试环境配置,也不容易自动测试

    -通知和等待启动条件的代码部分重复es(如果错误a调用b,如果错误b调用c,如果错误d调用e)。

    -您无法准确地跟踪哪些批处理文件已过时,哪些定期更新 打电话

    -要了解发送或接收哪些文件,您需要逐个打开每个批。

    -它们对应用程序施加设计约束,普通代码不能被抽象掉

    -要实现水平功能(例如,使用默认日志策略,计算每个作业的调用次数),需要在许多文件上写入(不可维护?)代码。

    好的一面是:

    • 很难编写一个批来将情况恢复到安全状态。

    • 他们经受了战斗的考验。它们已经投入生产很长时间了

    我想出了这个解决方案:

    • 编写一些Java库,其中我提供了常见的函数和配置(用于通知人们事件的函数、用于传输文件的函数、用于等待条件的函数)。

    • 脚本可以由用户根据需要在不同的类中提供 jar

    • 脚本可以通过注释自动记录

    • 脚本引擎可以要求脚本输出其自身及其参数的描述

    • 将文件的制作与复制分开


    我决定支持Java,而不是脚本语言(PHP、Python),这样我就可以享受编译的好处,而不必担心在公共库中编写可能触发“致命错误”并停止脚本执行的内容。

    我觉得这将简化大多数标准批处理文件(类型1和2)的执行,另一方面,我担心很难表示类型3的批处理。 此外,我将实施自动部署,我担心的是,虽然编写错误的批处理文件可能会产生问题,但在引擎本身(即使可能由于编译和测试而不太可能发生)或配置中部署一些错误代码可能会产生更大的问题,影响所有脚本。

    我的问题是:

    你认为批量文件可以吗?在这种情况下,它们是否被广泛使用?

    你认为我走的方向对吗?有什么我没有考虑的吗?<

    有谁有更好的主意吗?

    你知道有什么框架可以帮助我吗?

    你认为开发这个系统在将来有更大的灵活性是值得的,还是我最好保留批次?

    请注意,任何要开发的新解决方案最初都将与现有系统集成,因此,例如,我不能重写所有内容以在应用程序服务器中工作。

    4 回复  |  直到 17 年前
        1
  •  3
  •   Peter Mortensen Pieter Jan Bonestroo    17 年前

    我建议使用 PowerShell .

    在我看来,这将是最不引人注目的前进方式。PowerShell支持您一直使用的所有shell命令,此外,您还可以开始创建PowerShell函数,并获得一些代码重用,减少逻辑重复。此外,Powershell脚本也很容易修改,就像批处理文件一样,使用Windows 7或Windows 2008上的最新版本,您可以获得ISE(集成脚本环境),您可以单步执行代码并以交互方式对其进行调试。

    如果需要更高级的功能,可以使用.NET framework编写复杂的cmdlet(commandlet),并将其用作Powershell脚本代码中的函数。

    另一个好处是,您不必在其他脚本环境中进行finnicky字符串操作,因为它们有一个对象管道,允许您编写复杂的命令,这样您就可以使用一个命令的输出作为另一个命令的输入。

    我每天使用PowerShell来安装和卸载.NET程序集、部署和取消部署Microsoft BizTalk实体、运行数据库脚本以及创建、配置和删除网站。

    快乐的脚本编写。


    http://pshscripts.blogspot.com/

    维基百科页面
    http://en.wikipedia.org/wiki/Windows_PowerShell

        2
  •  1
  •   C. Ross trotttrotttrott    17 年前

    我曾经开发过一个非常类似的应用程序,100+个.cmd文件调用OSQL。我们遇到了许多与您相同的问题,以及错误处理不佳的问题。在我看来,与编写一个框架在调度器和批处理/脚本文件之间切换相比,最好的选择是使用一个调度器来完成您想要的任务。在我看来,这种类型的系统需要一个老式的 Job Scheduler . 它调用可执行文件顺序,处理错误,并传递配置的参数。有许多不同的选择,包括 Zena 到 JobScheduler . 我建议选择一个具有良好GUI的。

        3
  •  0
  •   jwmajors81    17 年前

    你也可以试试石英( http://www.quartz-scheduler.org/ )。它是一个用Java构建的开源、免费的调度工具,支持多种不同类型的任务,可以利用各种数据库。到目前为止,我已经在DB2中使用了它。我们已经在生产中使用它超过2年了,它就像一个魅力。我们确实必须实现java服务包装程序,使其作为服务运行,但这很容易实现。

        4
  •  0
  •   Peter Mortensen Pieter Jan Bonestroo    17 年前

    如果我要替换批处理文件,我会使用一些.NET语言。NET包含用于线程、启动应用程序和轻松处理输出的库。当然,你也可以使用C作为脚本语言,甚至是PowerShell或Python。