2

アプリのさまざまなインスタンスがどのように起動されたかを判断しようとしている興味深いケースがあります。.NETが別の実行中のインスタンスにクエリを実行し、そのインスタンスに渡されるコマンドラインパラメータを取得できるようにする方法はありますか?これまで.NETでそれを行う方法を見つけることができなかったので、ここで誰かが以前にこのようなことをしたことがあるかどうかを確認したいと思いました。

4

3 に答える 3

4

この情報は、WMI を介して取得できます。

Win32_Processクラス、特にそのコマンド ライン プロパティを参照してください。このコード プロジェクトの記事では、これを行う方法についての指針を提供しています。

于 2008-09-04T17:54:11.337 に答える
2

通常、これらの変数はプログラムのメモリスペースに格納され、(理論的には)アクセスできないようにする必要があります。

他のインスタンスとのプロセス間通信を開始し、データを交換する方法を見つける必要があります。名前付きパイプは良いオプションの1つですが、これに関する適切なオプションを取得するには、新しいstackoverflowの質問を開始することをお勧めします。

-アダム

于 2008-09-04T17:36:48.570 に答える
0

今後の参考のために、これを機能させる方法のコード スニペットを次に示します。これは、すべてがどのように機能するかを確認するためのテストでした。実際に実装されたコードは、必要なコマンド ライン パラメーターを解析します。

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) 
      {}
   }
}
于 2008-09-24T13:42:12.713 に答える