Я не думаю, что есть встроенный способ узнать это. Однако я думаю, вы могли бы look up the parent process и использовать это как довольно хорошую эвристику. Быстрый тест показывает, что родительский процесс является «проводником» при запуске с Run (Win + R) или двойным щелчком. Вероятно, это будет cmd или powershell в любое другое время, кроме как при отладке в VS, тогда devenv будет родительским процессом. Очевидно, что если есть сценарии, в которых другие инструменты запускают экземпляр процесса, вы можете указать параметр командной строки для принудительного выполнения определенного поведения.
Вы код будет выглядеть примерно так:
// Note: Adapted from Hans Passant's answer linked above.
private static string GetParentProcessName()
{
var myId = Process.GetCurrentProcess().Id;
var query = string.Format("SELECT ParentProcessId FROM Win32_Process WHERE ProcessId = {0}", myId);
var search = new ManagementObjectSearcher("root\\CIMV2", query);
var queryObj = search.Get().OfType<ManagementBaseObject>().FirstOrDefault();
if (queryObj == null)
{
return null;
}
var parentId = (uint)queryObj["ParentProcessId"];
var parent = Process.GetProcessById((int)parentId);
return parent.ProcessName;
}
static void Main()
{
/*
Program code here.
*/
if (string.Equals(GetParentProcessName(), "explorer", StringComparison.InvariantCultureIgnoreCase))
{
Console.ReadLine();
}
}
Вы можете просто положить 'Console.ReadLine()' в конце вашей программы, так что вы можете прочитать вывод независимо от того, как он был запущен. Это приостановит программу, пока вы не нажмете Enter еще раз. –
, который не нужен и раздражает, когда вы запускаете его из командной строки. – Paedow
Попробуйте посмотреть [этот СОСТОЙЧИК] (http://stackoverflow.com/questions/17508093/determine-if-program-is-run-from-cmd- or-from-explorer) – Icemanind