Как вы можете определить, как было запущено консольное приложение? - PullRequest
4 голосов
/ 20 августа 2010

Как я могу узнать, запустил ли пользователь мое консольное приложение, дважды щелкнув EXE (или ярлык), или у него уже было открыто окно командной строки и запустил мое консольное приложение в этом сеансе?

Ответы [ 2 ]

8 голосов
/ 19 августа 2013

Вставьте это статическое поле в свой класс "Program", чтобы убедиться, что оно запускается перед любым выводом:

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\path\to\app.exe" (просматривая заголовок).

Я получил идею из win32-версии этого вопроса .

1 голос
/ 20 августа 2010

Вы можете понять это с помощью P / Invoking для Win32 GetStartupInfo () .

[DllImport("kernel32", CharSet=CharSet.Auto)]
internal static extern void GetStartupInfo([In, Out] STARTUPINFO lpStartupInfo);
...