gpt4 book ai didi

可以从控制台运行但不创建窗口的 C# 应用程序

转载 作者:行者123 更新时间:2023-11-30 17:02:43 25 4
gpt4 key购买 nike

我想创建一个 C# 应用程序,当您从控制台窗口运行它时,它的行为类似于控制台应用程序(并且可以将文本输出到控制台),但在外部运行时不会创建控制台窗口。我做了一些研究,通常的建议是创建一个 C# 控制台应用程序,然后将其项目类型更改为 Windows 应用程序。但是,当从控制台运行时,这会阻止写入 Console.WriteLine 消息。

有什么办法可以运行这样的程序吗?我不需要它来接受任何控制台输入。从控制台运行时,也许我可以使用其他一些方法来显示要显示的文本?

最佳答案

so all the console output shows up oddly after the prompt

在实践中使用 AttachConsole() 并不能很好地工作。命令处理器查看您的 .exe 文件并做两件不同的事情,具体取决于它是控制台模式应用程序还是 GUI 应用程序。如果它是控制台模式应用程序,那么它会等待程序退出,然后显示提示。如果它是一个 GUI 应用程序,那么它不会等待,它假定该程序将显示它自己的窗口。

这是怎么回事,启动程序后显示提示,等待输入。您的 Console.Write() 输出现在混合与命令处理器输出。您还会遇到 Console.ReadLine() 的问题,用户键入的第一行将转到命令处理器,而不是您。极大地混淆了用户。

解决方法是以不同方式启动您的程序。你有类型

  start /wait yourapp.exe args...

这使得命令处理器等待您的程序退出,就像控制台模式应用程序一样。

这不是很实用,您的应用程序的用户不会想到使用 start/wait。对此没有简单的修复,您需要使用 AllocConsole()。如果这是一个交易破坏者,那么您只需要创建另一个作为控制台应用程序的小 EXE 项目。通过命令行启动您的 GUI 应用程序。如果您给它的名称与您的 GUI exe 相同,但提供 .com 文件扩展名,那么它总是会被首先找到。它看起来像这样,适用于任何 gui 应用程序:

using System;
using System.Diagnostics;
using System.IO;
using System.Reflection;

class Program {
static void Main(string[] args) {
try {
var path = Assembly.GetExecutingAssembly().Location;
var dir = Path.GetDirectoryName(path);
var file = Path.GetFileNameWithoutExtension(path);
path = Path.Combine(dir, file + ".exe");

var prc = Process.Start(path, Environment.CommandLine);
if (args.Length > 0) prc.WaitForExit();
}
catch (Exception ex) {
Console.WriteLine(ex.Message);
Environment.Exit(1);
}
}
}

关于可以从控制台运行但不创建窗口的 C# 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19471527/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com