2012-03-02 10 views
23

के तहत कोड चल रहा है या नहीं, मुझे यकीन नहीं है कि यह भी संभव है, लेकिन मैं यह निर्धारित करने के लिए एक सुराग की उम्मीद कर रहा हूं कि वर्तमान में निष्पादित कोड आईआईएस एक्सप्रेस के तहत चल रहा है या नहीं। मेरे करीबी अनुमान अब तक, जो अविश्वसनीय रूप से hackish है और निश्चित रूप से कुछ बिंदु पर विफल/तोड़ देगा:प्रोग्रामेटिक रूप से निर्धारित करता है कि आईआईएस एक्सप्रेस

bool IsExpress = 
    Request.ServerVariables["SERVER_SOFTWARE"] == "Microsoft-IIS/7.5" 
    && Int32.Parse(Request.ServerVariables["INSTANCE_ID"]) > 1000000000; 

निश्चित रूप से वहाँ है एक बेहतर तरीका हो सकता है। एप्लिकेशन, सर्वर और अनुरोध ऑब्जेक्ट्स की मेरी परीक्षा में कुछ भी प्रकट नहीं हुआ जो बेहतर अंतर्दृष्टि प्रदान कर सकता है। शायद मुझे बस किसी अन्य वस्तु को देखने की ज़रूरत है?

अद्यतन:

मैं इस का पता लगाने के लिए एक रास्ता है, तो वास्तव में उत्सुक हूँ - यह इस बिंदु पर वास्तव में शैक्षिक मैं एक जलती हुई नहीं है इसका इस्तेमाल करने की जरूरत है। मूल सवाल खड़ा है। लेकिन टिप्पणियों का जवाब देने की भावना में, विशेष रूप से मुझे इस साइट पर किसी अन्य प्रश्न/उत्तर से आलोचना का जवाब देने में दिलचस्पी है: How to search the server's MIME map। आलोचना यह है कि पोस्ट किया गया जवाब आईआईएस एक्सप्रेस, केवल पारंपरिक आईआईएस उदाहरणों के लिए काम नहीं करता है। आईआईएस एक्सप्रेस applicationhost.config एक्सएमएल फ़ाइल में एमआईएमई कॉन्फ़िगरेशन स्टोर करता है और मैं उस उत्तर को अपडेट करना चाहता हूं ताकि आईआईएस एक्सप्रेस के लिए उस जानकारी को वापस करने का एक तरीका प्रदान किया जा सके। मैं निश्चित रूप से कुछ कोड जोड़ सकता हूं जो एक्सएमएल से उपयुक्त मूल्य पकड़ता है (यानी LINQ से XML!) लेकिन मैं वास्तव में इसे बेहतर बनाना चाहता हूं। स्पष्ट होने के लिए, मुझे उस फ़ाइल को पार्स करने में मदद की ज़रूरत नहीं है - यह पता लगाने की कोशिश में कुछ और अधिक सुरुचिपूर्ण है कि कोड वर्तमान में आईआईएस एक्सप्रेस इंजन में निष्पादित कर रहा है या नहीं।

अद्यतन 2:

IIS 8.0 एक्सप्रेस बीटा released this week था, और यह आगे पता चलता है कि मेरे सवाल में दृष्टिकोण भंगुर है और टूट जाएगा चला जाता है। हालांकि यह एक विशिष्ट संस्करण को लक्षित करने के लिए एक सौदा ब्रेकर नहीं है, इसके लिए यह अच्छा लगेगा और यह सुनिश्चित करने का प्रयास करें कि कोड कम से कम ज्ञात संस्करणों के साथ काम करेगा।

+0

आपका लक्ष्य क्या है? यह क्यों पता लगाना चाहते हैं (शायद आपका लक्ष्य प्राप्त करने का कोई और तरीका है)? – Yahia

+5

यदि यह आईआईएस एक्सप्रेस में चल रहा है, तो आप अलग-अलग संभालना चाहते हैं? शायद यही सवाल है कि आपको आईआईएस एक्सप्रेस का पता लगाने के बजाय पूछने की जरूरत है। "डीबग में चलते समय _____ के बजाय मैं ____ कैसे करूं ?," उदाहरण के लिए। –

+0

इच्छा कुछ कॉन्फ़िगरेशन तत्वों की जांच के आसपास केंद्रित है - निर्देशिका एंटर्री ("आईआईएस:/लोकलहोस्ट/डब्ल्यू 3 एसवीसी /") बनाम एक्सएमएल को एप्लिकेशनहोस्ट.कॉन्फिग में एक्सएम को पार्स करना जो आईआईएस एक्सप्रेस को नियंत्रित करता है। – Goyuix

उत्तर

24

वर्तमान प्रक्रिया नाम की जांच करना चाल चल रहा है?

bool isExpress = 
    String.Compare(Process.GetCurrentProcess().ProcessName,"iisexpress") == 0; 

सामान्य आईआईएस स्मृति से w3wp.exe के तहत चलाता है।

+1

आईआईएस 7.5 के लिए यह 'w3wp' है - लेकिन मैं आईआईएस के विभिन्न संस्करणों के बारे में निश्चित नहीं हूं। मुझे पता है कि यह आईआईएस के असली पुराने संस्करणों के लिए कुछ अलग है ... – debracey

+1

@ पुराने संस्करणों के लिए @debracey हाँ यह 'aspnet_wp.exe' होगा। – Strelok

+0

इस दृष्टिकोण के साथ मुझे सामना करने वाला एकमात्र संभावित मुद्दा यह है कि System.Diagnostics.Process क्लास को पूर्ण ट्रस्ट की आवश्यकता होती है। अन्यथा एक आकर्षण की तरह काम कर रहा प्रतीत होता है। – Goyuix

2

आप कॉम स्तर API में छोड़ने से परहेज नहीं करते हैं, तो आप आईआईएस संस्करण प्रबंधक API

इस्तेमाल कर सकते हैं http://msdn.microsoft.com/en-us/library/gg418429.aspx

इस कैसे इस अतः पोस्ट में इस्तेमाल किया गया है के बारे में कुछ चर्चा है: Starting and stopping IIS Express programmatically - - बिल्कुल वही नहीं जो आप चाहते हैं, लेकिन वे एपीआई का उपयोग करके चर्चा करते हैं।

संपादित करें: मुझे यह जोड़ना चाहिए कि मैंने इसे स्वयं नहीं किया है लेकिन यह आशाजनक, शुभकामनाएं प्रतीत होता है!

+0

मैंने इस एपीआई में देखा लेकिन मेरे पास दो आरक्षण थे: एक इसे "आपके कोड से सीधे इस्तेमाल करने का इरादा नहीं है" - एक सौदा ब्रेकर नहीं बल्कि किसी को प्रोत्साहित नहीं करता है। दो मुझे यकीन नहीं है कि कैसे (या यहां तक ​​कि यदि आप कर सकते हैं) वर्तमान में निष्पादन कोड को एपीआई से लौटाए गए उदाहरण से कनेक्ट करें। शायद यूआरएल या कुछ मिलान करके। – Goyuix

+0

यह सुनिश्चित नहीं है कि आप क्या प्राप्त कर रहे हैं - लेकिन मैं क्या करूँगा IIS संस्करण को आपके कोड में (अपने स्वयं के प्रबंधित 'enum' में) खींचें जब एप्लिकेशन पूल शुरू होता है, तो बस उसे एक स्थिर चर में संग्रहीत करें - - हर बार COM एपीआई पूछताछ बंद मत जाओ। सर्वर प्रकार स्पष्ट रूप से आपके ऐप को पुनरारंभ किए बिना बदल नहीं सकता है। – debracey

+0

यदि मैं IISVersionManager क्लास को नया करता हूं, तो मुझे मशीन पर उपलब्ध आईआईएस इंस्टेंस की एक सूची मिल सकती है, लेकिन मेरे पास आईआईएस इंस्टेंस के अंदर निष्पादित कोड में आईआईएसवीर्सन इंटरफेस मैपिंग का कोई तरीका नहीं है। मैं वास्तव में नहीं देखता कि यह COM API मुझे कैसे पता चलता है कि वर्तमान में चल रहा कोड आईआईएस एक्सप्रेस के अंदर है या नहीं - न केवल आईआईएस एक्सप्रेस उपलब्ध है। हो सकता है कि एक कोड नमूना आपको जो सुझाव दे रहा है उसे स्पष्ट करने में मदद करेगा? – Goyuix

2

क्या हम कोशिश नहीं कर सकते हैं और देख सकते हैं कि एक या अधिक limitation of IIS Express काम करता है या नहीं, अगर यह काम करता है तो यह आईआईएस एक्सप्रेस नहीं है। उदाहरण आईआईएस एक्सप्रेस शेयरपॉइंट सेवाओं का समर्थन नहीं करता

+0

क्या आप कृपया उन विशिष्ट (या अन्य) सीमाओं को साझा कर सकते हैं जो आपको लगता है कि आप विश्वसनीय रूप से परीक्षण कर सकते हैं? – Goyuix

+0

कुछ प्रकार की क्वेरी, पर्यावरण चर% IISBin% एक अच्छा संकेत होगा? या क्वेरी शेयर पॉइंट सेवा और यदि परिणाम असमर्थित है- अपवाद हम जानते हैं कि हम आईआईएस एक्सप्रेस –

+0

पर हैं IIS_BIN% के लिए परीक्षण कर सकते हैं, ऐसा लगता है कि केवल आईआईएस एक्सप्रेस उस चर को सेट करता है। एकमात्र गोचा यह है कि पर्यावरण चरम वर्ग को उन चरों तक पहुंच से इनकार करने के लिए सेट किया जा सकता है। मेरे पास "प्वाइंट प्वाइंट सेवा के लिए पूछताछ" का कोई मतलब नहीं है - शेयरपॉइंट एक ऐसा उत्पाद है जिसे आप इंस्टॉल कर सकते हैं, आईआईएस के मूल निवासी नहीं। – Goyuix

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