Ist es möglich zu bestimmen, welcher Prozess startet mein .Net-Anwendung?
-
09-06-2019 - |
Frage
Ich entwickle Konsolenanwendung in .Und ich Net ändern möchten, ein Verhalten, ein wenig auf Informationen beruhen, die Anwendung gestartet wurde cmd.exe oder explorer.exe.Ist es möglich?
Lösung
Process this_process = Process.GetCurrentProcess();
int parent_pid = 0;
using (ManagementObject MgmtObj = new ManagementObject("win32_process.handle='" + this_process.Id.ToString() + "'"))
{
MgmtObj.Get();
parent_pid = Convert.ToInt32(MgmtObj["ParentProcessId"]);
}
string parent_process_name = Process.GetProcessById(parent_pid).ProcessName;
Andere Tipps
Die CreateToolhelp32Snapshot Funktion hat ein Process32First Methode, erlauben Sie zu Lesen PROCESSENTRY32-Struktur.Die Struktur hat die Eigenschaft, dass Sie erhalten die gewünschten Informationen:
th32ParentProcessID - Die id der Prozess, der dies geschaffen Prozess (übergeordneten Prozess).
Dieser Artikel wird Ihnen helfen, die ersten Schritte mit dem ToolHelpSnapshot Funktion:
Ein Problem mit der ToolHelp/ManagementObject Ansätze ist, dass der übergeordnete Prozess könnte bereits wieder verlassen haben.
Die GetStartupInfo Win32-Funktion (PInvoke verwenden, wenn es keine .NET-äquivalent) füllt eine Struktur, die enthält den Fenstertitel.Für eine Win32-Konsolenanwendung "app.exe" dieser Titel string "app" beim starten von cmd und "c:\full\path o\app.exe" beim Start von explorer (oder der VS-debugger).
Natürlich ist das ein hack (subject to change in anderer Versionen, etc.).
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
int main()
{
STARTUPINFO si;
GetStartupInfo(&si);
MessageBox(NULL, si.lpTitle, NULL, MB_OK);
return 0;
}