几天前,我使用VC#2010 Express在C#中开发了一个WinForms应用程序。在创建和保存项目之后,我在项目设置中将其设置为控制台应用程序,因此除了启动表单之外,还会弹出一个Windows命令行。我使用控制台输出调试信息(只需使用Console.Write()函数)。
所以现在,我的应用程序已准备好发布。我肯定不希望用户看到控制台,但我想整合一种向有兴趣的人展示控制台的方法。所以,最好的方法是参数,我认为(比如-console),但我不知道如何在设置参数时将程序作为控制台应用程序启动。我知道如何处理args []数组,但我不知道如何在有arg时显示控制台。我已经尝试过只需通过命令行启动程序(CMD - > prog.exe),但它没有用。程序启动,但是控制台会像往常一样在启动程序后直接显示当前路径。
我有意图吗?
答案 0 :(得分:2)
AFAIK,没有办法让单个二进制文件支持控制台和非控制台行为,可以选择在启动时使用。我见过的所有解决方案都使用了两个二进制文件。
有关于Python如何处理问题的讨论here(粗体我的):
Python 附带的标准Python.exe 称为控制台应用程序(这意味着它是为与Windows控制台进行交互而构建的,也称为DOS框或命令提示符)。虽然您可以使用Python.exe执行Tkinter程序,但您的程序将始终与Windows控制台相关联。它工作正常,但有以下副作用:
- 如果从Windows资源管理器执行Python.exe,则会创建一个新的空控制台窗口;然后创建Tkinter窗口。
- 如果从命令提示符下执行Python.exe下的Tkinter应用程序,则在Tkinter应用程序完成之前,命令提示符不会返回。对于许多用户来说,这将是一个惊喜,他们希望执行GUI程序立即返回命令提示符。
为了解决这个问题, Python附带了一个名为Pythonw.exe的特殊GUI版本。这几乎与标准的Python.exe完全相同,除了它不是控制台程序,因此不会遇到前面描述的问题。
答案 1 :(得分:1)
您可以在表单加载事件中获取Winform的命令行参数,然后如果参数是用于控制台,则打开控制台。
private void Form1_Load(object sender, EventArgs e)
{
string[] args = Environment.GetCommandLineArgs();
foreach(string arg in args)
{
if(arg == "consoleargument")
{
// Run console
}
}
}
答案 2 :(得分:0)
您可以链接到kernel32.dll并使用函数AttachConsole
。
这是一个例子:http://www.csharp411.com/console-output-from-winforms-application/