如何检测 EXE 文件是否在命令行界面中启动

Mar*_*And 0 .net c# command-line-interface winforms

我有一个带有工作 GUI 的 Windows 窗体应用程序。但是,我希望该应用程序能够在命令行界面以及常规 GUI 应用程序中启动和使用。当应用程序在 CLI 中启动时,不应使用 GUI,而是将相关信息写入 CLI 应用程序。我需要做的是一种检测应用程序(其 exe 文件)是在 CLI 应用程序(例如常规 windows CMD)中启动还是以正常方式启动(例如单击文件资源管理器中的 exe 文件或使用)的方法桌面快捷方式。

最好在应用程序的主要方法中进行检测,例如

static class Program
    {
        [STAThread]
        static void Main()
        {
            //if(application not started in a CLI-application) 
                 Application.Run(new DriverToolApplicationContext());
             //else 
                 //Console.writeLine("Application started in CLI-application");
        }

    }
Run Code Online (Sandbox Code Playgroud)

如何最好地实施这种检测?我最好不想在 main 方法中放置任何参数。

Cai*_*ard 6

我认为你会在没有争论的情况下挣扎;我能想到的大多数应用程序都有这个双模式操作包作为两个 exe,一个 gui 一个和一个命令行一个(一个可能使用另一个)

这确实是拥有规则的最简单方法:

  • 如果应用程序启动时没有参数,打印(和/或 messagebox.show)命令行参数并退出
  • 如果应用程序以例如 /gui 参数(烘焙到 Windows 快捷方式)启动,它将作为 gui 运行
  • 如果应用程序是使用命令行操作的其他参数启动的,请按照这些参数进行操作

你当然可以改变这些,也许你会有:

  • 如果应用程序启动时没有参数,则作为 gui 运行
  • 如果应用程序以例如 /? 参数打印命令行参数并退出
  • 如果应用程序是使用命令行操作的其他参数启动的,请按照这些参数进行操作

我提出这个建议主要是因为,要作为命令行应用程序真正有用,应用程序可能需要从命令行获取参数,因此您可以使用它们的存在或不存在来推断应用程序的启动位置。当然,它并不完美 - 快捷方式可以“从 Windows 开始”,但传递的参数将使我的应用程序认为它是命令行,但我要说的是,通常这并不重要,因为这个问题不是这么多关于“它从哪里开始?” 如“应用程序是否有足够的信息来完成其工作,还是必须向用户询问信息?”