2010-10-02 11 views
8

मैं एक ऐप बनाने की कोशिश कर रहा हूं जो विशिष्ट समय पर कार्य करेगा (विंडोज़ टास्क शेड्यूलर की तरह)। मैं वर्तमान में कार्य द्वारा आवश्यक फ़ाइल (या exe) लॉन्च करने के लिए Process.Start() का उपयोग कर रहा हूं।सिस्टम के साथ शुरू की गई प्रक्रिया को मार डालें। डायग्नोस्टिक। प्रोसेस। स्टार्ट ("फ़ाइल नाम")

मैं एक फ़ाइल (an.mp3) को कॉल करके एक प्रक्रिया शुरू कर रहा हूं और प्रक्रिया WMP शुरू होती है (क्योंकि यह डिफ़ॉल्ट एप्लिकेशन है)। अब तक सब ठीक है। अब मैं उस प्रक्रिया को मारना चाहता हूं। मुझे पता है कि प्रक्रिया के लिए यह सामान्य व्यवहार है। इस मामले में कुछ भी (सी # में शून्य) वापस करने के लिए स्टार्ट (स्ट्रिंग, स्ट्रिंग)।

तो मैं पूछ रहा हूं कि जब मैं इसे प्रोसेस.स्टार्ट (स्ट्रिंग, स्ट्रिंग) के माध्यम से बुलाता हूं तो मैं डब्लूएमपी को कैसे बंद कर सकता हूं ??

संपादित करें:

कृपया ध्यान दें कि मैं) Process.Start (के साथ सीधे WMP खोलने नहीं कर रहा हूँ और इस लाइन जिसके साथ मैं प्रक्रिया को चलाने है:

वीबी: Me._procs.Add (Process.Start (Me._procInfo))

सी #: this._procs.Add (Process.Start (this._procInfo))

_procInfo एक ProcessStartInfo उदाहरण है। _procInfo.FileName "सी: \ मार्ग \ myFile.mp3" है। यही कारण है कि डब्ल्यूएमपी खुलता है। किसी भी मामले में, सभी प्रारंभ() विधियों, उदाहरण के अलावा, जो एक बुलियन लौटाता है, कुछ भी नहीं लौटाता है (सी # में शून्य), क्योंकि डब्ल्यूएमपी ऐसी प्रक्रिया नहीं है जो सीधे बनाया गया था (कृपया ध्यान दें कि डब्ल्यूएमपी चलाया गया है और गीत खेलता है)।

+0

मेरे ज्ञान के लिए, 'प्रक्रिया। स्टार्ट' केवल 'शून्य' वापस कर देगी यदि कोई प्रक्रिया वास्तव में शुरू नहीं हुई थी, उदा। दस्तावेज़ को लोड करने के लिए एक मौजूदा प्रक्रिया का पुन: उपयोग किया गया था (आपके मामले में, एक एमपी 3 फ़ाइल)। क्या आप वास्तव में एक प्रक्रिया को मारना चाहते हैं जो आपका कोड वास्तव में शुरू नहीं हुआ था? – Ani

+0

@Ani - स्थैतिक स्टार्ट सभी रिटर्न प्रक्रिया को कॉल करता है लेकिन सदस्य फ़ंक्शन बूल –

+0

@ स्टेव टाउनसेंड देता है: ठीक है, लेकिन मेरा मानना ​​है कि ओपी स्थिर विधि के बारे में बात कर रहा है। यदि एक गैर-शून्य 'प्रक्रिया' ऑब्जेक्ट का संदर्भ पहले से ही उपलब्ध था, तो समस्या मौजूद नहीं होगी। – Ani

उत्तर

8

इसे इस तरह से न करें।

यह स्पष्ट नहीं है कि आपके प्रोग्राम का इरादा 'हमेशा विंडोज मीडिया प्लेयर के साथ लॉन्च' या 'पंजीकृत एमपी 3 प्लेयर के साथ लॉन्च' है, जो कह सकता है, आईट्यून्स।

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

यदि आपको पंजीकृत एमपी 3 प्लेयर की आवश्यकता है, तो आप the code shown here का उपयोग कर सही exe निकाल सकते हैं। फिर, पैरामीटर के रूप में एमपी 3 को पारित करने, इस exe पथ के साथ प्रक्रिया शुरू करें।

+0

बस जिस तरह से हम आपको धन्यवाद पर धन्यवाद देते हैं। – PedroC88

+0

धन्यवाद! तुमने मुझे 3k से भी ज्यादा भेज दिया। :) –

18

प्रक्रिया। स्टार्ट (स्ट्रिंग, स्ट्रिंग) आपको एक प्रक्रिया संसाधन देता है जिसका उपयोग आप नई प्रक्रिया को और नियंत्रित करने के लिए कर सकते हैं। यदि आप Process.Start(string), या किसी अन्य स्थिर Process.Start अधिभार का उपयोग

Process newProcess = Process.Start("param1", "param2"); 
if (newProcess != null) 
    newProcess.Kill(); 

उसी संरचना काम करता है।

Process.Start() एक सदस्य फ़ंक्शन है और Process को Process घटक के साथ एक नया या पुन: उपयोग किया गया है। इस विधि का व्यवहार this द्वारा पहचाने गए प्रक्रिया के गुणों पर निर्भर करता है।

5

दो तरीके:

1-

Process customProc = Process.Start("ExecutablePath", "Argument(s)"); 
customProc.Kill() 

2-

Dim pProcess() As Process = System.Diagnostics.Process.GetProcessesByName("ProcessName") 
For Each p As Process In pProcess 
p.Kill() 
Next 
+0

इस बारे में बात यह है कि चूंकि मैं प्रोग्राम शुरू करने वाला नहीं हूं (मैं सिर्फ फाइल को कॉल कर रहा हूं और विंडोज प्रोग्राम को संभालने में कामयाब रहा है) प्रक्रिया। स्टार्ट कुछ भी नहीं लौटाता है (सी # के लिए शून्य)। – PedroC88

2

मैं .txt फ़ाइल और मेरे पाठ संपादक की प्रक्रिया खोलने की कोशिश की वापस आ गया था, भी मैंने कोशिश की। डब्ल्यूएमपी द्वारा एमपी 3 और यह शून्य वापस आ गया। तो यह आवेदन पर निर्भर करता है। क्या आपको केवल एमपी 3 के साथ एमपी 3 चलाने की ज़रूरत है? यदि नहीं, तो आप निश्चित रूप से एप्लिकेशन बना सकते हैं जो प्रक्रिया ऑब्जेक्ट को वापस कर देगा।

3

यदि आप पंजीकृत विंडोज प्रोग्राम को प्रोग्राम खोलने के बजाए फ़ाइल खोलने के बजाय दे रहे हैं। तब मैं सलाह देता हूं कि आप प्रक्रिया को मार न दें।

इसका कारण यह है कि आपका प्रोग्राम डिफ़ॉल्ट एप्लिकेशन का उपयोग करता है, लेकिन वह एप्लिकेशन पहले से उपयोग में है, और इसमें सहेजे गए डेटा शामिल हैं। कोई उपयोगकर्ता आपके प्रोग्राम के लिए नई फ़ाइल के साथ एप्लिकेशन से आगे निकलने में खुश नहीं होगा और फिर उस प्रक्रिया को मार देगा जो किसी अन्य उद्देश्य के लिए उपयोगकर्ता द्वारा उपयोग में पहले से ही उपयोग में है। निश्चित रूप से, यह उपयोग में नहीं हो सकता है लेकिन आपको सबसे खराब मामले पर विचार करना चाहिए।

इस प्रकार, मैं अनुशंसा करता हूं कि सुझाव दिया गया है। प्रोजेक्ट का उपयोग करने के लिए प्रक्रिया के पूर्ण पथ के साथ Process.Start() का उपयोग करें और फ़ाइल खोलने के लिए।

1

proc = Process.Start(filename) काम करना चाहिए, लेकिन जैसा कि आप कहते हैं, यह प्रक्रिया के बजाय शून्य हो जाता है।

ऐसा लगता है कि विंडोज मीडिया प्लेयर के लिए निहित है। अन्य अनुप्रयोग प्रक्रिया वापस करते हैं। आप प्रारंभ विधि में एप्लिकेशन निर्दिष्ट करके विंडोज मीडिया प्लेयर की प्रक्रिया प्राप्त कर सकते हैं।

proc = Process.Start("C:\Program Files\Windows Media Player\wmplayer.exe", filename) 

फिर आप इसे सामान्य रूप से मार सकते हैं।

proc.Kill() 

आपको शायद रजिस्ट्री से .mp3 फ़ाइलों के साथ assiciated एप्लिकेशन का स्थान प्राप्त करने की आवश्यकता होगी।

संबंधित मुद्दे