.NET peut-il vérifier les paramètres de ligne de commande d’autres programmes en cours d’exécution ?

StackOverflow https://stackoverflow.com/questions/44260

  •  09-06-2019
  •  | 
  •  

Question

Nous avons un cas intéressant dans lequel nous essayons de déterminer comment différentes instances de notre application ont été lancées.Existe-t-il un moyen pour .NET d'interroger une autre instance en cours d'exécution et de transmettre les paramètres de ligne de commande à cette instance ?Je n'ai trouvé aucun moyen de le faire dans .NET jusqu'à présent, j'ai donc pensé vérifier ici si quelqu'un avait déjà fait quelque chose comme ça auparavant.

Était-ce utile?

La solution

Vous pouvez récupérer ces informations via WMI.

Voir le Processus Win32_ classe, en particulier sa propriété de ligne de commande.Ce Article sur le projet de code fournit des indications sur la façon de procéder,

Autres conseils

Généralement, ces variables sont stockées dans l'espace mémoire du programme, auquel vous ne devriez (théoriquement) pas pouvoir accéder.

Vous devrez découvrir comment initier la communication interprocessus avec les autres instances et les données commerciales.Les canaux nommés sont une bonne option, mais vous souhaiterez peut-être lancer une nouvelle question stackoverflow pour obtenir de bonnes options à ce sujet.

-Adam

Pour référence future, voici un extrait de code expliquant comment je l'ai fait fonctionner.C'était juste pour un test pour voir comment tout cela fonctionnait.Le code réellement implémenté analyse les paramètres de ligne de commande pour ce dont nous avons besoin.

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) 
      {}
   }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top