.NET能否检查其他正在运行的程序命令行参数?

malias 发布于 2018-04-26 .net 最后更新 2018-04-26 12:56 219 浏览

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

已邀请:

overo

赞同来自:

通常,这些变量存储在程序的内存空间中,您应该(理论上)应该无法访问这些空间。 您需要了解如何启动与其他实例和交易数据的进程间通信。命名管道是一个不错的选择,但你可能想要开始一个新的stackoverflow问题来获得这个好的选择。 -亚当

xquis

赞同来自:

您可以通过WMI检索这些信息。 请参阅Win32_Process类,特别是其命令行属性。这Code Project article提供了如何做到这一点的指针,

malias

赞同来自:

为了将来的参考,以下是我如何运作的代码片段。这只是一个测试,看看它是如何工作的。实际实现的代码解析我们需要的命令行参数。

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