如何确定一个控制台应用程序是如何启动的? [英] How can you determine how a console application was launched?

查看:245
本文介绍了如何确定一个控制台应用程序是如何启动的?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我怎么能告诉用户是否通过推出我的控制台应用程序双击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?

推荐答案

坚持这一静态字段在计划类,以确保它的任何输出前运行:

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:\ ULL \路径\为\ APP.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:\ull\path\to\app.exe" (by looking at the title).

我从<一个想法href="http://stackoverflow.com/questions/17508093/determine-if-program-is-run-from-cmd-or-from-explorer">win32版本这个问题的。

这篇关于如何确定一个控制台应用程序是如何启动的?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆