2

我们有一个有趣的案例,我们试图确定我们的应用程序的不同实例是如何启动的。.NET 有什么方法可以查询另一个正在运行的实例并获取传递给该实例的命令行参数?到目前为止,我还没有找到任何方法在 .NET 中执行此操作,所以我想我会在这里查看是否有人以前做过类似的事情。

4

3 回答 3

4

您可以通过 WMI 检索此信息。

请参阅Win32_Process类,尤其是它的命令行属性。此代码项目文章提供了有关如何执行此操作的指示,

于 2008-09-04T17:54:11.337 回答
2

通常这些变量存储在程序的内存空间中,你应该(理论上)不应该能够访问。

您需要了解如何启动与其他实例和交易数据的进程间通信。命名管道是一个不错的选择,但您可能想开始一个新的 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 回答