none
Aufrufparameter eines Prozesses auslesen RRS feed

  • Frage

  • Hallo,

    angenommen auf meinem Testsystem sind 3 Prozesse "proz.exe" gestartet. Kann ich herausfinden, mit welchen Parametern die einzelnen Prozesse aufgerufen wurden?

    Beste Grüße

    Sven

    Freitag, 29. Oktober 2010 04:52

Antworten

Alle Antworten

  • Hallo Sven,

    zuerst mal mit cmd.exe und dann: WMIC PROCESS get Name,Commandline,Processid
    prüfen, wie der Name Deines Prozesses dort ist. Nehmen wir mal an: "proz.exe". Dann etwa:

    using System;
    using System.Windows.Forms;
    
    // unter Verweise die System.Management.dll einbinden.
    using System.Management;
    
    namespace WinProzDemo
    {
     public partial class Form1 : Form
     {
     public Form1()
     {
      InitializeComponent();
     }
    
     private void Form1_Load(object sender, EventArgs e)
     {
      string prozessName = "proz.exe";
      string abfrage = "Select * From Win32_Process Where Name = '" + prozessName + "'";
      ManagementObjectSearcher objektSuche = new ManagementObjectSearcher(abfrage);
      ManagementObjectCollection prozessListe = objektSuche.Get();
    
      foreach (ManagementObject prozess in prozessListe)
      {
      object prozessID = prozess.GetPropertyValue("ProcessID");
      object kommandoZeile = prozess.GetPropertyValue("CommandLine");
      string info = "Der Prozess mit der ProzessID " + prozessID +
      "hat die Kommandozeile: \r\n" + kommandoZeile;
      MessageBox.Show(info);
      }
     }
     }
    }
    
    

     


    ciao Frank

    • Als Antwort markiert Sven So Montag, 1. November 2010 06:33
    Freitag, 29. Oktober 2010 13:55
  • Vielen Dank,

    beide Antworten waren sehr hilfreich!

    Montag, 1. November 2010 06:43
  • Hallo Frank,

    ich muss noch mal darauf Bezug nehmen.

    Ich habe den Code eingebaut und er funktioniert auch.

    Die Anwendung läuft im TaskPlaner und mit unterschiedlichen Benutzerrechten. Wenn jetzt 2 Prozesse gleichzeitig unter verschiedenen Benutzer laufen, erhalte ich folgenden Fehler:

    System.NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.


    Wahrscheinlich hat der eine Nutzer nicht die Rechte, den Prozess des anderen auszulesen.



    Hat jemand eine Idee, wie ich diese Klippe umschiffen kann?

     

    Danke!

    Mittwoch, 15. Dezember 2010 06:28
  • Hallo Sven,

    also die Get-Methode benötigt: "Volle Vertrauenswürdigkeit für den unmittelbaren Aufrufer. Dieser Member kann nicht von teilweise vertrauenswürdigem Code verwendet werden" [s.a. Verwenden von Bibliotheken aus teilweise vertrauenswürdigem Code].

    Es ist ja normal einfach so, dass eine Variable dann den Wert "null" hat und versucht wird, von dieser zu referenzieren - also zum Beispiel davon eine Methode aufzurufen. Das sollte eigentlich gut in den Griff zu bekommen sein, wenn Du die Ausnahme zum Beispiel in den EventLog schreibst.

    Entweder führt man also eine Impersonifizierung im Code durch, oder man trägt im TaskScheduler gleich den richtigen (mit entsprechenden Berechtigungen versehenen) Benutzer ein. Den TaskScheduler (Taskplaner) kann man ja hervorragend über C# anprogrammieren.

     


    ciao Frank
    Donnerstag, 16. Dezember 2010 15:10
  • Danke für die Hinweise. Die sauberste Geschichte ist es wohl, die Anwendung gleich im richtigen Kontext laufen zu lassen. Daran werd ich mich jetzt mal versuchen.

     

    Danke!

    Montag, 20. Dezember 2010 05:59
  • Hallo Sven,

    • Danke für die Hinweise.

    gern.

    • Die sauberste Geschichte ist es wohl, die Anwendung gleich im richtigen Kontext laufen zu lassen.

    Das sehe ich auch so, dann hat man ggf. kein Passwort direkt im Programm zu berücksichtigen.
    Dennoch hat Taskplaner dazu auch eine Schnittstelle, die sich leicht bedienen läßt:

    [Task Scheduler Managed Wrapper]
    http://taskscheduler.codeplex.com/
    [Beispiele]:http://taskscheduler.codeplex.com/wikipage?title=Examples&referringTitle=Documentation

    ______________________________

    Folgende Member sind dann beim Taskplaner im Passwort-Szenario relevant:

    InteractiveTokenOrPassword
        Member von Microsoft.Win32.TaskScheduler.TaskLogonType
    First use the interactive token. If the user is not logged on (no interactive token is available), then the password is used. The password must be specified when a task is registered. This flag is not recommended for new tasks because it is less reliable than Password.

    Password
        Member von Microsoft.Win32.TaskScheduler.TaskLogonType
    Use a password for logging on the user. The password must be supplied at registration time.

    UserPassword { get; set; }
        Member von Microsoft.Win32.TaskScheduler.TaskService
    Gets or sets the user password to be used when connecting to the Microsoft.Win32.TaskScheduler.TaskService.TargetServer.


    ciao Frank
    Montag, 20. Dezember 2010 08:04