У нас есть интересный случай, когда мы пытаемся определить, как были запущены различные экземпляры нашего приложения. Есть ли какой-либо способ для .NET иметь возможность запрашивать другой запущенный экземпляр и получать параметры командной строки, переданные этому экземпляру? До сих пор я не смог найти способ сделать это в .NET, поэтому я подумал, что проверил бы здесь, чтобы увидеть, сделал ли кто-нибудь подобное раньше.Может ли .NET проверить другие параметры командной строки запущенных программ?
ответ
Вы можете получить эту информацию через WMI.
См. Класс Win32_Process, в частности его свойство командной строки. Это Code Project article содержит указатели на то, как это сделать,
Обычно эти переменные хранятся в памяти программы, к которой вы должны (теоретически) не иметь доступа.
Вам нужно узнать, как инициировать межпроцессное общение с другими экземплярами и торговыми данными. Именованные каналы - один из хороших вариантов, но вы можете начать новый вопрос о стеке, чтобы получить хорошие варианты.
Адам
Для справки в дальнейшем здесь приведен фрагмент кода, как я получил его на работу. Это было просто для теста, чтобы увидеть, как все это сработало. Фактически реализованный код анализирует параметры командной строки для того, что нам нужно.
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)
{}
}
}