私はこれを見つけるための組み込みの方法はないと思います。しかし、私はあなたがlook up the parent processとかなり良好なヒューリスティックとしてそれを使用できると思う。クイックテストでは、Run(Win + R)またはダブルクリックから起動すると、親プロセスが「エクスプローラ」であることが示されます。 VSでデバッグする場合を除いて、おそらくはcmdまたはpowershellになり、devenvは親プロセスになります。明らかに、他のツールがプロセスのインスタンスを開始するシナリオがある場合、特定の動作を強制するコマンドラインパラメータを与えることができます。 `あなたのプログラムの終了時にあなたは関係なく、それが実行されたかの出力を読み取ることができるので、あなただけの` Console.ReadLine()を置くことができる
// 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();
}
}
:
あなたのコードは次のようになります。もう一度Enterキーを押すまでプログラムを一時停止します。 –
コマンドラインから起動すると不要で迷惑なものになる – Paedow
[このような質問]を見てみてください(http://stackoverflow.com/questions/17508093/determine-if-program-is-run-from-cmd- or-from-explorer) – Icemanind