.NET可以检查其他正在运行的程序的命令行参数吗?

时间:2020-03-05 18:47:45  来源:igfitidea点击:

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

解决方案

回答

通常,这些变量存储在程序的存储空间中,从理论上讲,我们应该不能访问这些变量。

我们将需要了解如何启动与其他实例的进程间通信以及交易数据。命名管道是一个不错的选择,但是我们可能想开始一个新的stackoverflow问题,以获取关于这个的好的选择。

-亚当

回答

我们可以通过WMI检索此信息。

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

回答

为了将来参考,这是我如何工作的代码片段。这只是一个测试,以了解其工作原理。实际实现的代码将解析命令行参数以获取所需的内容。

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) 
      {}
   }
}