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.
Zu a.
Der Caller könnte seine eigene ID dem Programm in den Start-Argumenten mitgeben.
Du müsstest Dein Programm nur darauf anpassen.
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
vielen lieben Dank Spooky!
Aller Wahrscheinlichkeit nach wird das Weltall von einem Rudel Irrer regiert.