我有一个小的控制台应用程序,输出一行信息。当我在控制台实例中运行程序时,由于命令提示符在程序完成后重新出现,我能够看到结果。但是,当我从“运行”窗口([Win]+[R])启动程序时,控制台窗口立即消失(因为我没有加入暂停功能,除非它不是由命令行启动,否则我不想加入)。那么,如何确定程序是从命令行还是直接启动的呢?
// 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();
}
}
我认为没有任何方法可以通过编程确定控制台应用程序的启动方式。
如果您希望应用程序在这些不同的情况下表现不同,则建议使用参数,例如:
MyApp.exe /keepopen
代码:
static int Main(string[] args)
{
// Test if argument was supplied:
if (args.Any(a => a == "/keepopen"))
{
System.Console.ReadLine();
}
}
Console.ReadLine();
,这样无论程序如何运行,都可以读取输出。它会暂停程序,直到你再次按下 Enter 键。 - Bill the Lizard