2008-09-04 10 views
2

У нас есть интересный случай, когда мы пытаемся определить, как были запущены различные экземпляры нашего приложения. Есть ли какой-либо способ для .NET иметь возможность запрашивать другой запущенный экземпляр и получать параметры командной строки, переданные этому экземпляру? До сих пор я не смог найти способ сделать это в .NET, поэтому я подумал, что проверил бы здесь, чтобы увидеть, сделал ли кто-нибудь подобное раньше.Может ли .NET проверить другие параметры командной строки запущенных программ?

ответ

4

Вы можете получить эту информацию через WMI.

См. Класс Win32_Process, в частности его свойство командной строки. Это Code Project article содержит указатели на то, как это сделать,

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