Frage

Wir haben einen interessanten Fall, in dem wir versuchen herauszufinden, wie verschiedene Instanzen unserer App gestartet wurden.Gibt es für .NET eine Möglichkeit, eine andere laufende Instanz abzufragen und die an diese Instanz übergebenen Befehlszeilenparameter abzurufen?Bisher konnte ich in .NET keine Möglichkeit finden, dies zu tun, daher dachte ich, ich schaue mal hier nach, ob jemand so etwas schon einmal gemacht hat.

War es hilfreich?

Lösung

Sie können diese Informationen über WMI abrufen.

Siehe die Win32_Prozess Klasse, insbesondere ihre Befehlszeileneigenschaft.Das Artikel zum Code-Projekt gibt Hinweise, wie das geht,

Andere Tipps

Im Allgemeinen werden diese Variablen im Speicherbereich des Programms gespeichert, auf den Sie (theoretisch) keinen Zugriff haben sollten.

Sie müssen herausfinden, wie Sie die prozessübergreifende Kommunikation mit den anderen Instanzen initiieren und Daten austauschen können.Benannte Pipes sind eine gute Option, aber Sie möchten möglicherweise eine neue Stackoverflow-Frage starten, um gute Optionen hierfür zu erhalten.

-Adam

Zum späteren Nachschlagen finden Sie hier einen Codeausschnitt, der zeigt, wie ich es zum Laufen gebracht habe.Dies war nur ein Test, um zu sehen, wie alles funktionierte.Der tatsächlich implementierte Code analysiert die Befehlszeilenparameter für das, was wir brauchen.

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) 
      {}
   }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top