2008-09-10 13 views
8

मैं .NET में कंसोल एप्लिकेशन विकसित कर रहा हूं और मैं cmd.exe से या explorer.exe से एप्लिकेशन शुरू होने वाली जानकारी के आधार पर थोड़ा व्यवहार बदलना चाहता हूं। क्या यह संभव है?क्या यह निर्धारित करना संभव है कि कौन सी प्रक्रिया मेरे .NET अनुप्रयोग को शुरू करती है?

उत्तर

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

कृपया एडम मिट्ज टिप्पणी को देखें। सादगी के कारण मुझे अभी भी यह जवाब सबसे अच्छा मिला है। हालांकि किसी को चिंता करनी चाहिए। –

3

CreateToolhelp32Snapshot Function में प्रोसेस 32 फर्स्ट विधि है जो आपको PROCESSENTRY32 Structure पढ़ने की अनुमति देगी। - पहचानकर्ता प्रक्रिया है कि इस प्रक्रिया (अपनी मूल प्रक्रिया) बनाया का

th32ParentProcessID: संरचना एक संपत्ति है कि आप इच्छित जानकारी मिल जाएगा है।

इस लेख की मदद से आप ToolHelpSnapshot समारोह का उपयोग शुरू करने देगा: ToolHelp/ManagementObject साथ

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

3

एक मुद्दा दृष्टिकोण है कि माता-पिता की प्रक्रिया पहले से ही बाहर आ गए हैं सकता है।

GetStartupInfo Win32 फ़ंक्शन (यदि कोई .NET समतुल्य नहीं है तो PInvoke का उपयोग करें) उस संरचना में भर जाता है जिसमें विंडो शीर्षक शामिल है। Win32 कंसोल एप्लिकेशन "app.exe" के लिए, यह शीर्षक स्ट्रिंग "एप" है जब cmd से शुरू होता है और "c: \ full \ path \ to \ 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; 
} 
संबंधित मुद्दे