2008-09-04 8 views
2

Wir haben einen interessanten Fall, in dem wir herausfinden wollen, wie verschiedene Instanzen unserer App gestartet wurden. Gibt es eine Möglichkeit für .NET, in der Lage zu sein, eine andere laufende Instanz abzufragen und die Kommandozeilenparameter an diese Instanz zu übergeben? Ich konnte bisher noch keine Möglichkeit finden, es in .NET zu tun, also dachte ich mir, ich würde hier nachschauen, ob jemand schon einmal so etwas gemacht hat.Kann .NET andere Befehlszeilenparameter von laufenden Programmen prüfen?

Antwort

4

Sie können diese Informationen über WMI abrufen.

Siehe Klasse Win32_Process, insbesondere die Befehlszeileneigenschaft. Diese Code Project article bietet Zeiger auf, wie dies zu tun ist,

2

Im Allgemeinen werden diese Variablen im Speicher des Programms gespeichert, auf die (theoretisch) nicht zugegriffen werden kann.

Sie müssen herausfinden, wie Sie die Interprozesskommunikation mit den anderen Instanzen und Handelsdaten initiieren. Benannte Pipes sind eine gute Option, aber Sie möchten vielleicht eine neue Stackoverflow-Frage starten, um gute Optionen dafür zu erhalten.

-Adam

0

Zukünftige Referenz, hier ist ein Code-Snippet, wie ich es zum Funktionieren gebracht habe. Dies war nur für einen Test, um zu sehen, wie alles funktioniert hat. 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) 
     {} 
    } 
}