दिलचस्प पोस्ट
वहाँ php में संकेतक हैं? मैं स्विफ्ट में टाइप के शब्दकोश में क्लास <ClassImplementingProtocol> प्रकार के मान को कैसे संग्रहीत करूँ? कैसे पीएचपी की ईरेगी को प्रीजी_मैच में बदलना है जावा: अपने समय में 10 मिनट कैसे जोड़ना स्वत: समायोजन के बीच अंतर समझाते हुए ScrollViewInsets, विस्तारितलेआउटअनुमतिओएस्क्यूबार्स, किनारोंएफ़ास्टरेड IOS7 में प्रति सेकंड घड़ियों की वास्तविक संख्या CLOCKS_PER_SEC क्यों नहीं है? एंड्रॉइड में ड्रायेट करने के लिए बिटमैप कन्वर्ट कैसे करें? मैं PHP आउटपुट को एक चर में कैद कैसे करूं? PHP पीडीओ :: बिंदपाम () डेटा प्रकार .. यह कैसे काम करता है? ओपनसीवी में बीफ़डेड इमेज को बदलना कार्यात्मक प्रोग्रामिंग और गैर-कार्यात्मक प्रोग्रामिंग ResultSet: लेबल द्वारा पुनः प्राप्त करने के लिए अनुक्रमणिका बनाम कॉलम मूल्य प्राप्त करना एक अहस्ताक्षरित n-bit पूर्णांक 2 ^ n-1 के अधिकतम मूल्य और 2 ^ n क्यों नहीं है? $ http अनुरोधों में कुकी नहीं भेजता MATLAB स्रोत फ़ाइलों में यूनिकोड वर्ण

मैं अपने आवेदन की मूल प्रक्रिया के पीआईडी ​​कैसे प्राप्त कर सकता हूं

मेरे विनफ़ॉर्म आवेदन को एक अन्य एप्लिकेशन (माता-पिता) द्वारा लॉन्च किया गया है, मुझे आवेदन की पीआईडी ​​निर्धारित करने की आवश्यकता है जो कि सी # का उपयोग करते हुए मेरे आवेदन को लॉन्च करता है।

Solutions Collecting From Web of "मैं अपने आवेदन की मूल प्रक्रिया के पीआईडी ​​कैसे प्राप्त कर सकता हूं"

WMI यह सी # में करने का आसान तरीका है। Win32_Process क्लास में ParentProcessId संपत्ति है यहां एक उदाहरण है:

using System; using System.Management; // <=== Add Reference required!! using System.Diagnostics; class Program { public static void Main() { var myId = Process.GetCurrentProcess().Id; var query = string.Format("SELECT ParentProcessId FROM Win32_Process WHERE ProcessId = {0}", myId); var search = new ManagementObjectSearcher("root\\CIMV2", query); var results = search.Get().GetEnumerator(); results.MoveNext(); var queryObj = results.Current; var parentId = (uint)queryObj["ParentProcessId"]; var parent = Process.GetProcessById((int)parentId); Console.WriteLine("I was started by {0}", parent.ProcessName); Console.ReadLine(); } } 

दृश्य स्टूडियो से चलाने पर आउटपुट:

मुझे डेवन द्वारा शुरू किया गया था

एक गाइड के रूप में ब्रायन आर बॉन्डि के उत्तर का उपयोग करते हुए, साथ ही साथ PInvoke.net पर क्या है, और कुछ परावर्तक आउटपुट, मैंने इसे LinqPad MyExtensions में उपयोग के लिए MyExtensions :

 public static int ParentProcessId(this Process process) { return ParentProcessId(process.Id); } public static int ParentProcessId(int Id) { PROCESSENTRY32 pe32 = new PROCESSENTRY32{}; pe32.dwSize = (uint)Marshal.SizeOf(typeof(PROCESSENTRY32)); using(var hSnapshot = CreateToolhelp32Snapshot(SnapshotFlags.Process, (uint)Id)) { if(hSnapshot.IsInvalid) throw new Win32Exception(); if(!Process32First(hSnapshot, ref pe32)) { int errno = Marshal.GetLastWin32Error(); if(errno == ERROR_NO_MORE_FILES) return -1; throw new Win32Exception(errno); } do { if(pe32.th32ProcessID == (uint)Id) return (int)pe32.th32ParentProcessID; } while(Process32Next(hSnapshot, ref pe32)); } return -1; } private const int ERROR_NO_MORE_FILES = 0x12; [DllImport("kernel32.dll", SetLastError=true)] private static extern SafeSnapshotHandle CreateToolhelp32Snapshot(SnapshotFlags flags, uint id); [DllImport("kernel32.dll", SetLastError=true)] private static extern bool Process32First(SafeSnapshotHandle hSnapshot, ref PROCESSENTRY32 lppe); [DllImport("kernel32.dll", SetLastError=true)] private static extern bool Process32Next(SafeSnapshotHandle hSnapshot, ref PROCESSENTRY32 lppe); [Flags] private enum SnapshotFlags : uint { HeapList = 0x00000001, Process = 0x00000002, Thread = 0x00000004, Module = 0x00000008, Module32 = 0x00000010, All = (HeapList | Process | Thread | Module), Inherit = 0x80000000, NoHeaps = 0x40000000 } [StructLayout(LayoutKind.Sequential)] private 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; }; [SuppressUnmanagedCodeSecurity, HostProtection(SecurityAction.LinkDemand, MayLeakOnAbort=true)] internal sealed class SafeSnapshotHandle : SafeHandleMinusOneIsInvalid { internal SafeSnapshotHandle() : base(true) { } [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode=true)] internal SafeSnapshotHandle(IntPtr handle) : base(true) { base.SetHandle(handle); } protected override bool ReleaseHandle() { return CloseHandle(base.handle); } [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success), DllImport("kernel32.dll", CharSet=CharSet.Auto, SetLastError=true, ExactSpelling=true)] private static extern bool CloseHandle(IntPtr handle); } 

यदि आपके पास माता पिता के आवेदन पर नियंत्रण है, तो आप माता-पिता को अपने पीआईडी ​​को इस प्रक्रिया को लॉन्च करने के दौरान अपने पीआईडी ​​पास करने के लिए संशोधित कर सकते हैं।

एक CreateToolhelp32 स्नैपशॉट गणना के th32ParentProcessID सदस्य की जांच करें।

यह कैसे करना है इसका उदाहरण यहां मेरी पोस्ट देखें

चूंकि आप सी # का उपयोग कर रहे हैं, हालांकि आपको DllImports का उपयोग करना होगा। लिंक्ड पोस्ट में आपके लिए आवश्यक कार्यों के लिए प्रत्येक के लिए MSDN पृष्ठ हैं। प्रत्येक एमएसडीएन पृष्ठ के निचले भाग में उनके पास DllImport के लिए C # के लिए कोड है।

केवल प्रबंधित कोड का उपयोग करने के लिए एक आसान तरीका भी है, लेकिन यदि आपके पास एक से अधिक प्रक्रिया नाम विभिन्न अनुप्रयोगों द्वारा शुरू किए गए हैं, तो यह काम नहीं करता है।