【发布时间】:2008-09-04 17:34:27
【问题描述】:
我们有一个有趣的案例,我们试图确定我们的应用程序的不同实例是如何启动的。 .NET 有什么方法能够查询另一个正在运行的实例并获取传递给该实例的命令行参数?到目前为止,我还没有找到任何方法在 .NET 中执行此操作,所以我想我会在这里查看是否有人以前做过类似的事情。
【问题讨论】:
标签: .net command-line parameters
我们有一个有趣的案例,我们试图确定我们的应用程序的不同实例是如何启动的。 .NET 有什么方法能够查询另一个正在运行的实例并获取传递给该实例的命令行参数?到目前为止,我还没有找到任何方法在 .NET 中执行此操作,所以我想我会在这里查看是否有人以前做过类似的事情。
【问题讨论】:
标签: .net command-line parameters
您可以通过 WMI 检索此信息。
查看Win32_Process 类,尤其是它的命令行属性。这个Code Project article 提供了如何做到这一点的指针,
【讨论】:
通常这些变量存储在程序的内存空间中,您应该(理论上)不应该能够访问。
您需要了解如何启动与其他实例和交易数据的进程间通信。命名管道是一个不错的选择,但您可能想开始一个新的 stackoverflow 问题以获得更好的选择。
-亚当
【讨论】:
为了将来参考,这里是我如何让它工作的代码 sn-p。这只是为了测试它是如何工作的。实际实现的代码会解析我们需要的命令行参数。
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)
{}
}
}
【讨论】: