代码之家  ›  专栏  ›  技术社区  ›  Jonathan

我应该在应用程序中包含命令行模式吗?

  •  5
  • Jonathan  · 技术社区  · 15 年前

    为了学习的目的,我正在用C和WinForms开发一个类生成应用程序。我认为可以在脚本中包含允许使用应用程序的命令行模式。

    在我的应用程序中包含命令行模式是一个好的实践?最好有两个不同的程序,一个是命令行的GUI?

    10 回复  |  直到 15 年前
        1
  •  9
  •   Remus Rusanu    15 年前

    实际上,拥有一个C应用程序既是控制台又是GUI是有问题的。控制台应用程序( /t:exe )启动,然后命令提示符等待它们完成。GUI应用程序( /t:winexe )命令shell启动它们,然后立即返回。虽然您可以从“控制台”应用程序创建和运行表单,但它始终会显示一个后台控制台。另一方面,“表单”应用程序没有连接stdin、stdout和stderr,虽然它们可以作为命令行工具和处理命令参数,但是在脚本中嵌入它们时会出现问题(因为标准输入/输出没有连接)。

    如果您也希望公开来自GUI驱动的应用程序和可脚本/可管道的批处理的功能,最好的方法是将您的功能编译到类库中,然后构建两个独立的应用程序(一个GUI一个控制台),利用该库。

        2
  •  5
  •   Michael Aaron Safyan    15 年前

    我不是一个C程序员,但是当我用C++编程时,我发现最有用的是:

    1)创建一个具有C的共享库以及用于执行核心应用程序功能的C++ API。

    2.)创建一个或多个可供shell解释器访问的命令行二进制文件。

    3.)为典型的最终用户创建一个GUI应用程序,用库实现(而不是通过调用二进制文件)。

    这将应用程序的逻辑从接口分离到应用程序,并使第三方开发人员能够为相同的应用程序功能创建替代接口。它还使得编写脚本变得容易,同时满足了典型的最终用户,他们需要一个漂亮的、闪亮的GUI。

        3
  •  2
  •   Colin Mackay    15 年前

    对。如果您认为该程序在脚本化环境中很有用,那么就包括一个命令行模式(不带UI),这样它就可以在脚本中使用。

    它不必是单独的应用程序,但可以是。你是否想这样做完全取决于你自己。我可以想象,如果您有两个应用程序,它们会共享相同的逻辑程序集,但是接口(一个是GUI,另一个是命令行)会有所不同。

        4
  •  2
  •   jeffa00    15 年前

    我同意michaelsafyan关于创建具有核心功能的库的观点。

    我要补充的是,您还应该检查PowerShell Cmdlet。

    许多命令行活动将迁移到PowerShell,这会给表带来很多好处。

    http://en.wikipedia.org/wiki/Windows_PowerShell

        5
  •  2
  •   John Saunders    15 年前

    我经常创建一个API这样的实用程序。如果我需要从一个简单的命令行实用程序中使用它,那很简单——它只调用API。如果命令行变得太复杂,可能是时候使用WinForms应用程序了——它也可以调用API。如果我想从PowerShell或者从一个msbuild任务中使用它,它们仍然很容易——它们只是调用API。

        6
  •  1
  •   Jasper Bekkers    15 年前

    在Windows平台上创建一个作为控制台应用程序正确运行的应用程序可能会有问题。这是Windows内核体系结构的问题,因为它们被认为是两种不同类型的应用程序(它们有一个不同的子系统,通常在编译器或链接器选项中指定)。您仍然可以通过win32函数alloconsole()和friends手动重定向IO并从win32应用程序打开控制台,但这也有一些问题。参见 This Old New Thing post 更多信息。

        7
  •  1
  •   Aragorn    15 年前

    如果您希望在脚本中运行实用程序/prgram,可以将其公开为com。

    许多Windows脚本语言都可以直接使用COM对象。

        8
  •  1
  •   BenMorel Pankaj Kumar    11 年前

    您应该在应用程序中包含一个命令行接口, 如果它提高了可用性和舒适性。 例如,调用一个cli命令可能比启动gui更快,通过几个菜单层导航以达到相同的功能。 您可能会询问应用程序的用户,如果他们发现使用CLI模式很有用的话。

    有关在Windows上与cli&gui结婚的一些词汇: Windows应用程序是GUI应用程序或控制台应用程序,但是 两者都有。这是一个操作系统问题,可能没人能解决。 Windows中的控制台子系统很糟糕,PowerShell没有改变这一点。

    Windows上的实现选项包括:

    • 两个文件方法:

    提供两个文件:一个带有控制台的.com,一个带有GUI的.exe。 由于在命令行上进行可执行探测,COM文件将在执行之前执行。

    • 控制台闪烁方法:

    在控制台模式打开的情况下编译您的GUI应用程序,然后在GUI启动后立即调用freeconsole()关闭它。 这有点烦人,但有效。坏:现在您有一个闪烁的控制台窗口。专家:还是一个文件。

        9
  •  0
  •   N30    15 年前

    我同意@remus rusanu。

    您应该为核心功能创建一个类库,然后为此构建GUI应用程序(包装器)。

    另外一个好处是,您甚至不需要创建命令行应用程序,因为您可以使用PowerShell访问.NET DLL功能。

    你可以找到一个例子 here

        10
  •  0
  •   wadesworld    15 年前

    另一个好主意是嵌入脚本语言。然后,您的程序可以由一个脚本控制,您可以“免费”从脚本语言中获得所有的逻辑、分支等。

    可以嵌入的内容有很多选择。Lua是其中一个最受欢迎的,并且是一个很好的选择。

    然而,对于一个通用的应用程序,我将仔细研究嵌入Python。python非常流行,你会有更多的人愿意为你的应用程序写一个脚本。