.NET は他の実行中のプログラムのコマンド ライン パラメーターをチェックできますか?
-
09-06-2019 - |
質問
アプリのさまざまなインスタンスがどのように起動されたかを特定しようとしている興味深いケースがあります。.NET が別の実行中のインスタンスをクエリして、そのインスタンスに渡されたコマンド ライン パラメータを取得できる方法はありますか?これまでのところ、.NET でこれを行う方法が見つからなかったので、ここで誰かが以前に同じようなことをしたかどうかを確認してみようと思いました。
解決
この情報は WMI を通じて取得できます。
を参照してください。 Win32_プロセス クラス、特にそのコマンド ライン プロパティ。これ コードプロジェクトの記事 これを行う方法についてのヒントを提供します。
他のヒント
通常、これらの変数はプログラムのメモリ空間に格納されており、(理論的には) アクセスできないはずです。
他のインスタンスとのプロセス間通信を開始し、データを取引する方法を見つける必要があります。名前付きパイプは優れたオプションの 1 つですが、これに関する適切なオプションを取得するには、新しい stackoverflow の質問を開始することをお勧めします。
-アダム
将来の参考のために、私がそれを動作させる方法のコードスニペットをここに示します。これは、すべてがどのように機能するかを確認するためだけのテストでした。実際に実装されたコードは、必要なものを求めてコマンド ライン パラメーターを解析します。
try
{
ManagementScope connectScope = new ManagementScope();
connectScope.Path = new ManagementPath(@"\\" + Environment.MachineName + @"\root\CIMV2");
SelectQuery msQuery = new SelectQuery("SELECT * FROM Win32_Process Where Name = '" + "PROGRAMNAMEHERE.exe" + "'");
ManagementObjectSearcher searchProcedure = new ManagementObjectSearcher(connectScope, msQuery);
foreach (ManagementObject item in searchProcedure.Get())
{
try
{
MessageBox.Show(item["CommandLine"].ToString());
}
catch (SystemException)
{}
}
}
所属していません StackOverflow