我们有一个有趣的案例,我们正在尝试确定应用程序的不同实例是如何启动的。有没有办法让.NET能够查询另一个正在运行的实例并获取传递给该实例的命令行参数?到目前为止,我还没有找到任何方法在.NET中这样做,所以我想我会在这里查看是否有人之前做过这样的事情。
答案 0 :(得分:4)
您可以通过WMI检索此信息。
请参阅Win32_Process类,特别是其命令行属性。这个Code Project article提供了有关如何执行此操作的指示,
答案 1 :(得分:2)
通常这些变量存储在程序的存储空间中,您应该(理论上)应该无法访问它。
您需要了解如何启动与其他实例和交易数据的进程间通信。命名管道是一个不错的选择,但您可能想要启动一个新的stackoverflow问题以获得良好的选项。
- 亚当
答案 2 :(得分: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)
{}
}
}