2012-06-15 9 views
8

मैं यह पता लगाने की कोशिश कर रहा हूं कि किसी एप्लिकेशन का उदाहरण (vb.net नहीं) पहले से चल रहा है - क्योंकि मैं इसे शुरू करना चाहता हूं लेकिन अगर यह पहले से चल रहा है तो मैं इसे शुरू नहीं करना चाहता हूं। मैं अगर एक प्रक्रिया चल रही है जांच करने के लिए एक समाधान मिल गया है:मैं VB.NET में चल रहे प्रक्रिया नामों की सूची कैसे प्राप्त करूं?

Dim proc As Integer = Process.GetProcessesByName(ProcessName).GetUpperBound(0) + 1 

और यह सच है लौटने अगर> = 1 (या बस प्रक्रिया संख्या)।

मेरी समस्या यह है कि यह एक तृतीय-पक्ष एप्लिकेशन है, और इसकी प्रक्रिया का नाम सिर्फ एक नाम नहीं है, लेकिन इसमें एक संस्करण संख्या है (जिसे मैं रन टाइम पर नहीं जानता), और यह भी एक * 32 (तो शायद एक * 64 अगर यह x64 में स्थापित है?)।

मुझे नाम से चलने वाली प्रक्रियाओं की एक सूची प्राप्त करने की आवश्यकता है, और परीक्षण करें कि "प्रक्रिया नाम" नाम का एक सबस्ट्रिंग है या नहीं। लेकिन मैं नामों की सूची प्राप्त करने में सफल नहीं रहा हूं, केवल आईडी की प्रक्रिया करता हूं।

उत्तर

7

मैं अगर "processname" नाम की सबस्ट्रिंग है परीक्षण नाम से चल रही प्रक्रियाओं की एक सूची है, और प्राप्त करने की आवश्यकता।

आप इस्तेमाल कर सकते हैं:

Dim procExists as Boolean = Process.GetProcesses().Any(Function(p) p.Name.Contains(processName)) 

यह सभी प्रक्रियाओं के माध्यम से दिखाई देता रहेगा और सही पर procExists मान सेट करता है, तो किसी भी प्रक्रिया है जो processName शामिल वर्तमान में क्रियान्वित की प्रक्रिया में मौजूद है। यह अज्ञात संस्करण संख्या के साथ-साथ *32 के अस्तित्व को संभालना चाहिए जो तब हो सकता है जब आप 64 बिट ओएस पर चल रहे हों (यह WOW64 ध्वज कहता है कि यह 64 बिट ओएस पर चलने वाली 32 बिट प्रक्रिया है)।

+0

मैं इस की कोशिश की है, लेकिन "कोई भी" काम नहीं करता। * 32 को समझाने के लिए धन्यवाद। – Thalia

+0

@emptyheaded बस अपनी फ़ाइल के शीर्ष पर "System.Linq आयात करें" जोड़ें, और किसी को भी काम करना चाहिए। यह एक LINQ एक्सटेंशन विधि है (http://msdn.microsoft.com/en-us/library/bb534972.aspx) –

+1

@ रीड कॉपसी: क्या यह p.ame.Contains के बजाय 'p.ProcessName.Contains' नहीं होना चाहिए? और मुझे यकीन नहीं है कि अगर कोई मामला असंवेदनशील है। अन्यथा कुछ अतिरिक्त। ToUpper प्रक्रिया नाम की खोज करने में मददगार होगा? – PeterCo

6

आप कर सकते हैं इस तरह चल प्रक्रियाओं के माध्यम से पाश:

For Each p As Process In Process.GetProcesses() 
    Debug.WriteLine(p.ProcessName) 
Next 
2

एक और तरीका:

Dim psList() As Process 
    Try 
     psList = Process.GetProcesses() 

     For Each p As Process In psList 
      Console.WriteLine(p.Id.ToString() + " " + p.ProcessName) 
     Next p 

    Catch ex As Exception 
     Console.WriteLine(ex.Message) 
    End Try 
    Console.ReadKey() 
संबंधित मुद्दे