【问题标题】:winforms output to commandlinewinforms 输出到命令行
【发布时间】:2013-06-10 03:01:06
【问题描述】:

我有一个 winforms 应用程序。我想从命令行运行 .exe 并将输出从输出文本框之一重定向到命令行。我不想启动 winform 应用程序,只是在后台运行逻辑。

我尝试了这个帖子的建议

C# application both GUI and commandline

但是当我通过 cmd.exe 运行应用程序时,我没有在 cmd.exe 的命令行中看到任何 console.writeline 消息。谁能指导我做错了什么?

我有一个执行此逻辑的 if 语句:

  if(args.Length >0)
   {
     Console.writeline("this has arguments");
     new Mainform();
   }
  else
   {
    Application.EnableVisualStyles();
    Application.Run(new MainForm());
   }

else 部分仍然有效。但是,如果使用 cmd.exe 运行应用程序,或者当我使用属性 -> 调试 -> 命令行参数并在调试时为其提供运行参数时,if 部分没有任何反应。我不知道我做错了什么。

【问题讨论】:

  • 将逻辑移动到单独的 dll 中,并从表单和控制台应用程序中使用该 dll
  • 所以制作两个不同的应用程序?一个用于 Winforms,一个用于控制台?
  • 没错。并且两个应用程序将使用相同的业务逻辑,这将独立于您正在使用的 UI
  • 它不可见,因为 Winforms 应用程序没有控制台。 Pinvoke AllocConsole(不是 AttachConsole,输出混合在一起)。您的表单不可见,因为您忘记了 Application.Run()。
  • 这就是我最终所做的,它奏效了。另一个问题:为了得到提示,我需要输入 System.Windows.Forms.SendKeys.SendWait("{ENTER}");有谁知道为什么?

标签: c# winforms


【解决方案1】:

我认为您创建了Windows Forms project 并粘贴了代码?如果是这样,它就无法工作。你必须创建你的Console project,这是我测试过的代码,它就像一个魅力,除了当显示表单时(GUI 模式)控制台仍然存在,关闭该控制台也会关闭你的表单:

class Program
{
    static void Main(string[] args)
    {            
            if (args.Length == 0)
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new Form1());
            }
            else //Process command lines
            {
                Console.WriteLine("Please enter some command.");
                string cmd = Console.ReadLine();
                Console.WriteLine("You entered: " + cmd);
            }            
    }
}

因为Console project 不会自动为您添加对System.Windows.Forms.dll 的引用,因此您必须手动执行此操作才能在该控制台项目中创建表单。关键是您在Winforms project 中应用了代码,而它应该在Console project 中。我知道只有一种方法可以在运行 cmd.exe 的 winforms 应用程序中显示控制台窗口,但这会显示一个新的控制台窗口,而不是您用于运行应用程序的现有控制台窗口。

【讨论】:

  • 谢谢。是的,我最终自己弄清楚了。我现在确实附加到进程,它可以工作。我正在尝试找到一种无需按 Enter 键即可返回提示的非 hackish 方式。我使用 System.Windows.Forms.SendKeys.SendWait("{ENTER}");但我的老板对这个解决方案不满意,认为它是在破解它。
猜你喜欢
  • 2014-04-08
  • 1970-01-01
  • 2013-06-08
  • 2013-09-22
  • 1970-01-01
  • 2015-02-11
  • 2011-12-11
  • 2017-06-03
  • 1970-01-01
相关资源
最近更新 更多