2008-09-10 4 views

答えて

9
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; 
+0

下記のAdam Mitzのコメントを確認してください。私はまだこの答えがシンプルさのために最高だと感じました。しかし誰かが気になるはずです。 –

3

CreateToolhelp32Snapshot FunctionにはProcess32Firstメソッドがあり、PROCESSENTRY32 Structureを読み取ることができます。 - 識別子この プロセス(親プロセス)を作成したプロセスの

th32ParentProcessID:構造は、あなたが欲しい情報を取得する特性を有しています。

この資料では、ToolHelpSnapshot機能の使用を開始するのに役立ちます:TOOLHELP /するManagementObjectと

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

3

一つの問題に近づく親プロセスが既に終了している可能性があることです。

GetStartupInfo Win32関数(.NETに相当するものがない場合はPInvokeを使用)は、ウィンドウのタイトルを含む構造体を塗りつぶします。 Win32コンソールアプリケーション "app.exe"の場合、このタイトル文字列は、エクスプローラ(またはVSデバッガ)から起動するとcmdから起動すると "app"、 "c:\ full \ path \から\ app.exe"になります。

もちろん、これはハックです(他のバージョンなどで変更される場合があります)。

#define WIN32_LEAN_AND_MEAN 
#include <windows.h> 
int main() 
{ 
    STARTUPINFO si; 
    GetStartupInfo(&si); 
    MessageBox(NULL, si.lpTitle, NULL, MB_OK); 
    return 0; 
} 
関連する問題