问题描述
如何判断用户是否通过双击 EXE(或快捷方式)启动了我的控制台应用程序,或者他们是否已经打开了命令行窗口并在该会话中执行了我的控制台应用程序?
How can I tell whether the user launched my console application by double-clicking the EXE (or a shortcut), or whether they already had a command line window open and executed my console app within that session?
推荐答案
将此静态字段粘贴到您的Program
"类中,以确保它在任何输出之前运行:
Stick this static field in your "Program
" class to ensure it runs before any output:
static bool StartedFromGui =
!Console.IsOutputRedirected
&& !Console.IsInputRedirected
&& !Console.IsErrorRedirected
&& Environment.UserInteractive
&& Environment.CurrentDirectory == System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location)
&& Console.CursorTop == 0 && Console.CursorLeft == 0
&& Console.Title == Environment.GetCommandLineArgs()[0]
&& Environment.GetCommandLineArgs()[0] == System.Reflection.Assembly.GetEntryAssembly().Location;
这有点矫枉过正/偏执,但从资源管理器开始,而不响应 cls && 之类的东西app.exe
(通过检查完整路径)甚至 cls &&"f:ullpath oapp.exe"
(通过查看标题).
This is a little bit overkill/paranoid, but picks up being started from Explorer while not responding to things like cls && app.exe
(by checking for the full path) or even cls && "f:ullpath oapp.exe"
(by looking at the title).
我从 win32 版本的这个问题.
这篇关于如何确定控制台应用程序是如何启动的?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!