2010-02-26 16 views
5

से फ़ायरफ़ॉक्स रोक जब मैंशुरू और #

/Applications/Firefox.app/Contents/MacOS/firefox-bin

MacOSX पर Process.Start() का उपयोग कर मोनो, इस प्रक्रिया का आईडी का उपयोग शुरू जो वापस आ जाता है वह उस प्रक्रिया से मेल नहीं खाता है जो फ़ायरफ़ॉक्स के नीचे चल रहा है।

ऐसा लगता है जैसे फ़ायरफ़ॉक्स जल्दी से एक और प्रक्रिया शुरू करने का फैसला करता है, और वर्तमान को मारता है।

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

फ़ायरफ़ॉक्स को इस तरह से शुरू करने का कोई तरीका है कि यह ऐसा नहीं करता है "मैं जल्दी से आपके लिए एक नई प्रक्रिया करूंगा" नृत्य?

स्थिति यह सुनिश्चित करके कुछ हद तक पता लगाया जा सकता है कि फ़ायरफ़ॉक्स अपनी शुरुआत के बाद कम से कम 3 सेकंड तक चल रहा है, और जब ऐसा नहीं होता है, तो अन्य फ़ायरफ़ॉक्स प्रक्रियाओं के लिए स्कैन करें। हालांकि, यह तकनीक सबसे अच्छी तरह से कमजोर है, धीमी दिनों में यह 3 सेकंड से थोड़ा अधिक समय ले सकती है, और फिर इस व्यवहार के आधार पर सभी परीक्षण विफल हो जाते हैं।

यह पता चला है कि यह व्यवहार केवल तब होता है जब फ़ायरफ़ॉक्स को -P MyProfile का उपयोग करके एक विशिष्ट प्रोफ़ाइल शुरू करने के लिए कहा जाता है। (जो मुझे करने की ज़रूरत है, क्योंकि मुझे विशिष्ट प्रॉक्सीसेवर सेटिंग्स के साथ फ़ायरफ़ॉक्स शुरू करने की आवश्यकता है) यदि मैं फ़ायरफ़ॉक्स "सामान्य रूप से" शुरू करता हूं तो यह इसकी प्रक्रिया से चिपक जाता है।

+0

ध्यान दें कि यदि कोई उदाहरण पहले से चल रहा है, तो आप शायद वही व्यवहार देखेंगे। फ़ायरफ़ॉक्स स्पष्ट रूप से कई प्रक्रियाओं को बहुत पसंद नहीं करता है, इसलिए यह हर खिड़की को एक ही प्रक्रिया में क्रैक करने का फैसला करता है-इस तरह से बहुत मजेदार दुर्घटनाओं के लिए बनाता है :) – Joey

+0

सबसे खराब स्थिति परिदृश्य, एक और ब्राउज़र का उपयोग करें;) –

उत्तर

3

प्रोग्राम के रूप में मोज़िला का उपयोग करते समय/अन्य एप्लिकेशन में एम्बेड आपके द्वारा दी गई घटकों का उपयोग करना चाहिए: के रूप में मोज़िला द्वारा सिफारिश की

"सही तरीके से" ...

https://developer.mozilla.org/en/XPCOM

"आसान तरीका" मोज़िला देव लोगों से, आम सहमति ...

http://www.iol.ie/~locka/mozilla/control.htm

एन "प्रक्रिया निष्पादित करें" करने के लिए, बस घटक के एक उदाहरण को तुरंत चालू करें और उस पर बात करें, इसके बाद आपको अपनी हर चीज की आवश्यकता होनी चाहिए।

हालांकि ...

तुम सच में एक फ़ायरफ़ॉक्स उदाहरण के लिए वास्तविक प्रक्रिया के बाद लग रही पर जोर देते हैं, तो आपको

Process.Start कॉल करने के लिए चाहते हो सकता है ("... \ firefox.exe");

फिर कोशिश करें (मुझे विश्वास है कि यह मैक ओएस पर भी काम करता है) ...

C#/mono: get list of child processes on Windows and Linux

मूल विचार/सोचा पैटर्न जा रहा है कि अगर यह वास्तव में किसी अन्य प्रक्रिया को क्रियान्वित करने का तुरंत आप को खोजने के लिए सक्षम होना चाहिए कि के रूप में एक "बच्चा" प्रक्रिया सिर्फ एक सूची से एक होने के लिए किया बजाय होगा मशीन के लिए "कार्य सूची"/प्रक्रिया प्रबंधक में।

0

यदि आप फ़ायरफ़ॉक्स प्रक्रिया को स्वयं पहचानने के ठीक हैं, लेकिन यह नहीं पता कि आपको पहचान कब शुरू करनी चाहिए, तो आप Process.Exited ईवेंट का उपयोग कर सकते हैं। पहले EnableRaisingEvents सेट करना न भूलें।

0

मैं एक अलग दृष्टिकोण लेने का सुझाव देता हूं: सभी चल रही प्रक्रियाओं को सूचीबद्ध करें, फ़ायरफ़ॉक्स ढूंढें, इसकी प्रक्रिया आईडी प्राप्त करें और (वैकल्पिक) देखें कि यह आपके द्वारा शुरू किया गया है या नहीं।

मुझे यकीन नहीं है कि इसे पूरा करने के लिए एक मंच-स्वतंत्र तरीका है या नहीं। लिनक्स पर, आप उन्हें सूचीबद्ध करने के लिए "ps -ef" को कॉल कर सकते हैं, विंडोज़ पर इसे "कार्यसूची" कहा जाता है।

0

मेरे पास मैक नहीं है, इसलिए मुझे यकीन नहीं हो सकता है, लेकिन यदि यह लिनक्स की तरह कुछ भी है तो फ़ायरफ़ॉक्स 'बाइनरी' वास्तव में एक शेल स्क्रिप्ट है जो आवश्यक पर्यावरण चर का एक गुच्छा स्थापित करता है और फ़ायरफ़ॉक्स होने पर जांच करता है पहले से चल रहा है (यदि ऐसा है, तो यह मौजूदा उदाहरण में एक नया टैब कोशिश करेगा और जोड़ देगा, जहां तक ​​मुझे पता है)।

आप स्क्रिप्ट के भीतर नया पीआईडी ​​कैप्चर करने में सक्षम हो सकते हैं, हालांकि यदि आप इसे अपडेट करते हैं तो इसे अपग्रेड के दौरान ओवरराइट किया जाना चाहिए।

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