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