(view source code of parentprocess.cs as plain text)
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
// Source: "How to get the parent process that launched a C# application?" by Jared Barneck
// http://www.rhyous.com/2010/04/30/how-to-get-the-parent-process-that-launched-a-c-application/
namespace ParentProcess
{
public class ParentProcess
{
public static String ProcessName
{
get { return GetParentProcess( ).ProcessName; }
}
public static int ProcessId
{
get { return GetParentProcess( ).Id; }
}
public static String FullPath
{
get
{
return GetParentProcess( ).MainModule.FileName;
}
}
public static String FileName
{
get
{
return System.IO.Path.GetFileName( GetParentProcess( ).MainModule.FileName );
}
}
public static String DirectoryName
{
get
{
return System.IO.Path.GetDirectoryName( GetParentProcess( ).MainModule.FileName );
}
}
private static Process GetParentProcess( )
{
int iParentPid = 0;
int iCurrentPid = Process.GetCurrentProcess( ).Id;
IntPtr oHnd = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );
if ( oHnd == IntPtr.Zero )
return null;
PROCESSENTRY32 oProcInfo = new PROCESSENTRY32( );
oProcInfo.dwSize =
(uint) System.Runtime.InteropServices.Marshal.SizeOf( typeof( PROCESSENTRY32 ) );
if ( Process32First( oHnd, ref oProcInfo ) == false )
return null;
do
{
if ( iCurrentPid == oProcInfo.th32ProcessID )
iParentPid = (int) oProcInfo.th32ParentProcessID;
}
while ( iParentPid == 0 && Process32Next( oHnd, ref oProcInfo ) );
if ( iParentPid > 0 )
return Process.GetProcessById( iParentPid );
else
return null;
}
static uint TH32CS_SNAPPROCESS = 2;
[StructLayout( LayoutKind.Sequential )]
public struct PROCESSENTRY32
{
public uint dwSize;
public uint cntUsage;
public uint th32ProcessID;
public IntPtr th32DefaultHeapID;
public uint th32ModuleID;
public uint cntThreads;
public uint th32ParentProcessID;
public int pcPriClassBase;
public uint dwFlags;
[MarshalAs( UnmanagedType.ByValTStr, SizeConst = 260 )]
public string szExeFile;
};
[DllImport( "kernel32.dll", SetLastError = true )]
static extern IntPtr CreateToolhelp32Snapshot( uint dwFlags, uint th32ProcessID );
[DllImport( "kernel32.dll" )]
static extern bool Process32First( IntPtr hSnapshot, ref PROCESSENTRY32 lppe );
[DllImport( "kernel32.dll" )]
static extern bool Process32Next( IntPtr hSnapshot, ref PROCESSENTRY32 lppe );
}
}
page last modified: 2024-04-16; loaded in 0.0060 seconds