Laden...

Prozess ID des Aufrufenden Prozess' ermitteln.

Erstellt von inva vor 14 Jahren Letzter Beitrag vor 14 Jahren 4.004 Views
I
inva Themenstarter:in
37 Beiträge seit 2007
vor 14 Jahren
Prozess ID des Aufrufenden Prozess' ermitteln.

Hallo liebe Community!
Folgender Umstand plagt mich ein wenig:
Ich habe eine Consolen App, die von einem anderen Prozess angestoßen werden soll.
Nun möchte ich aber gern, dass diese, meine, Console App in das Consolen Fenster der aufrufenden oder ggf. sogar in ein eigenes Consolen Fenster schreibt.

Daher wäre meine Frage
a) Gibt es eine Möglichkeit die Prozess-ID des Callers zu ermitteln?
b) Kann ich es erzwingen, dass meine App, ein eigenes Consolen Fenster öffnet?

Grüße,
inva

*edit*

achja, wenn man zu faul ist selber fix zu gucken.

Die Lösung für b), die bevorzugt war hab ich!

So geht's:


[DllImport("kernel32.dll", SetLastError = true)]
private static extern bool FreeConsole();

[DllImport("kernel32.dll", SetLastError = true)]
private static extern bool AllocConsole();

static void Main(string[] args)
{
    /* do something here
        ...
        ...
        ...
   */
   AllocConsole();

   Console.WriteLine("something");
   // wait for input
   Console.ReadLine();

   FreeConsole();
}


Aller Wahrscheinlichkeit nach wird das Weltall von einem Rudel Irrer regiert.

888 Beiträge seit 2007
vor 14 Jahren

Zu a.

Der Caller könnte seine eigene ID dem Programm in den Start-Argumenten mitgeben.
Du müsstest Dein Programm nur darauf anpassen.

S
248 Beiträge seit 2008
vor 14 Jahren

Hallo inva,

mit WMI kannst du die ParentProcessId auslesen:

static bool TryGetParentProcessId(out int id)
{
	try
	{
		int ownId = Process.GetCurrentProcess().Id;
		ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_Process WHERE ProcessId=" + ownId);
		foreach (ManagementBaseObject row in searcher.Get())
		{
			id = (int)(uint)row["ParentProcessId"];
			return true;
		}
	}
	catch
	{

	}
	id = 0;
	return false;
}

static void Main(string[] args)
{
	int id;
	if (TryGetParentProcessId(out id))
		Console.WriteLine(Process.GetProcessById(id).ProcessName+ " called me.");
	else
		Console.WriteLine("Unable to identify caller.");
}

Spooky

I
inva Themenstarter:in
37 Beiträge seit 2007
vor 14 Jahren

vielen lieben Dank Spooky!

Aller Wahrscheinlichkeit nach wird das Weltall von einem Rudel Irrer regiert.