O .NET pode verificar os parâmetros de linha de comando de outros programas em execução?
-
09-06-2019 - |
Pergunta
Temos um caso interessante em que tentamos determinar como diferentes instâncias do nosso aplicativo foram iniciadas.Existe alguma maneira do .NET consultar outra instância em execução e obter os parâmetros da linha de comando passados para essa instância?Não consegui encontrar nenhuma maneira de fazer isso no .NET até agora, então pensei em verificar aqui se alguém já havia feito algo assim antes.
Solução
Você pode recuperar essas informações por meio do WMI.
Veja o Win32_Process classe, em particular sua propriedade de linha de comando.Esse Artigo do projeto de código fornece dicas sobre como fazer isso,
Outras dicas
Geralmente essas variáveis são armazenadas no espaço de memória do programa, que você (teoricamente) não deveria poder acessar.
Você precisará descobrir como iniciar a comunicação entre processos com outras instâncias e dados comerciais.Pipes nomeados são uma boa opção, mas você pode querer iniciar uma nova pergunta de stackoverflow para obter boas opções sobre isso.
-Adão
Para referência futura, aqui está um trecho de código de como fiz isso funcionar.Isso foi apenas para um teste para ver como tudo funcionava.O código realmente implementado analisa os parâmetros da linha de comando para o que precisamos.
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)
{}
}
}