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?

War es hilfreich?

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:

http://www.codeproject.com/KB/cs/IsApplicationRunning.aspx

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;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top