2011-02-08 3 views
10

के माध्यम से शुरू की गई प्रक्रिया के रूप में आईआईएस एक्सप्रेस को कैसे चलाया जाए, मैं अपने आवेदन के साथ आईआईएस एक्सप्रेस वितरित करने की कोशिश कर रहा हूं। आईआईएस एक्सप्रेस पोर्ट 80 पर बाहरी वेब अनुरोधों की सेवा करेगा।विंडोज सेवा

मुझे आईआईएस एक्सप्रेस चलाने के साथ-साथ बाहरी अनुरोधों की सेवा करने में कोई समस्या नहीं है, हालांकि माइक्रोसॉफ्ट ने अपने अनंत ज्ञान में आईआईएस एक्सप्रेस को कंसोल विंडो से चलाने के साथ-साथ सिस्टम ट्रे आइटम । आप ट्रे आइटम को कमांड लाइन तर्क से अक्षम कर सकते हैं लेकिन कंसोल विंडो नहीं।

मैं कंसोल विंडो प्रदर्शित किए बिना आईआईएस एक्सप्रेस चलाने के लिए चाहता हूं। मैं विंडोज़ सेवा से आईआईएस एक्सप्रेस भी चला सकता हूं।

अपने आवेदन के भीतर से निम्नलिखित कोड चल रहा है वास्तव में करता है जो मैं चाहता:

Directory.SetCurrentDirectory(string.Format("{0}\\IIS Express", iisProgramDirectory)); 
    process.EnableRaisingEvents = true; 
    //process.Exited += new EventHandler(process_Exited); 
    process.StartInfo.FileName = "iisexpress.exe"; 
    process.StartInfo.Arguments = string.Format("\"/config:{0}webservice\\config\\applicationhost.config\"", dataDirectory); 
    process.StartInfo.UseShellExecute = false; 
    process.StartInfo.RedirectStandardOutput = true; 
    process.StartInfo.RedirectStandardError = true; 
    process.StartInfo.CreateNoWindow = true; 
    process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; 
    //process.StartInfo.UserName = "Administrator"; 
    //System.Security.SecureString securePwd = new System.Security.SecureString(); 
    //string password = "**********"; 
    //char[] pword = password.ToCharArray(); 
    //for (int i = 0; i < pword.Length; i++) 
    //{ 
    // securePwd.AppendChar(pword[i]); 
    //} 
    //process.StartInfo.Password = securePwd; 
    process.Start(); 

जाहिर है मैं व्यवस्थापक के रूप में चल रहा हूँ। आईआईएस एक्सप्रेस को बाहरी अनुरोधों के साथ-साथ पोर्ट 80 पर सुनने के लिए प्रशासक विशेषाधिकारों के साथ चलाने की जरूरत है।

मेरी विंडोज सेवा विंडोज सेवा खाते के तहत चलती है, जिसका मेरा मानना ​​है कि पूर्ण विशेषाधिकार हैं लेकिन आईआईएस एक्सप्रेस प्रक्रिया सिर्फ शानदार रूप से बाहर निकलती है जब मैं इसे विंडोज सेवा से चलाने की कोशिश करता हूं तो 0 का त्रुटि कोड।

मैंने कई परिदृश्यों की कोशिश की है (जैसा कि आप कोड स्निपेट से देख सकते हैं) लेकिन ऐसा लगता है कि मैं आईआईएस एक्सप्रेस को अपनी विंडोज सेवा का उपयोग करके चल रहा हूं और डर्न कंसोल विंडो छुपा सकता हूं।

किसी भी सुझाव की सराहना की जाएगी।

+1

पुनश्च: पर

अच्छा लेख। क्या आप पूछे गए प्रश्नों के लिए और अधिक जवाब भी स्वीकार कर सकते हैं। –

उत्तर

-1

यह नहीं किया जा सकता तो आप भी पोर्ट 80

+0

आईआईएस एक्सप्रेस के साथ पोर्ट 80 पर अनुरोधों को सुनने की अनुमति देने के लिए HTTP.sys को कॉन्फ़िगर करने के तरीके पर यह यूआरएल देखें। http://learn.iis.net/page.aspx/1005/handling-url-binding-failures-in-iis-express/ –

0

iis.net फ़ोरम पर एक समान प्रश्न (कंसोल विंडो के बिना iisexpress चला रहा था) था। कृपया http://forums.iis.net/p/1175262/1970513.aspx#1970513

+0

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

+0

डेविड .. मुझे लगता है कि आपको "सत्र 0 अलगाव" पर जांच करने की आवश्यकता है .. इस टिप्पणी के अनुसार मैं इसे ले रहा हूं क्योंकि आप आईआईएस एक्सप्रेस को विंडोज़ सेवा के अंदर से शुरू करने की कोशिश कर रहे हैं ... यह आईआईएस शुरू करेगा लेकिन वह सत्र 0 में होगा ... यह जांचने के लिए कि जब आप अपनी सेवा चलाते हैं तो कार्य प्रबंधक-> प्रक्रिया-> सभी उपयोगकर्ताओं से शो प्रक्रियाओं पर क्लिक करें। वहां आप आईआईएस को अपने नाम के तहत चल सकते हैं लेकिन सत्र आईडी 0 के साथ ... यहां तक ​​कि मैं इसके लिए एक समाधान ढूंढ रहा हूं। अगर आपको एक मिलता है .. कृपया मुझे यह भी बताएं कि – Gautam

2

पर एक नज़र डालें। हमारे पास एक ही स्थिति थी और यह काम किया। यह आपकी मदद कर सकता है।

यह आईआईएस एक्सप्रेस 7.5 के साथ है जिसे प्रशासक अधिकारों की आवश्यकता नहीं है।

string IIS_EXPRESS = @"C:\Program Files\IIS Express\iisexpress.exe"; 

StringBuilder arguments = new StringBuilder(); 
arguments.Append(@"/path:"); 
arguments.Append(@"C:\Inetpub\wwwroot\ClientSyncService"); 
arguments.Append(@" /Port:2000"); 
Process process = Process.Start(new ProcessStartInfo() 
{ 
    FileName = IIS_EXPRESS, 
    Arguments = arguments.ToString(), 
    RedirectStandardOutput = true, 
    UseShellExecute = false, 
    CreateNoWindow = true 
}); 
+0

जैसा कि मैंने अपने प्रश्न में उल्लेख किया है, समय के लिए धन्यवाद, पोर्ट 80 का उपयोग करने की कोशिश करते समय यह काम नहीं करेगा क्योंकि आईआईएस एक्सप्रेस को पोर्ट 80 पर बाहरी अनुरोधों की सेवा करते समय प्रशासक के रूप में चलाया जाना चाहिए – David

7

की तरह जवाब: स्ट्रिंग IIS_EXPRESS = @ "C: \ Program Files \ आईआईएस एक्सप्रेस \ iisexpress.exe";

StringBuilder arguments = new StringBuilder(); 
    arguments.Append(@"/path:"); 
    arguments.Append(@"C:\Inetpub\wwwroot\ClientSyncService"); 
    arguments.Append(@" /Port:2000"); 
    Process process = Process.Start(new ProcessStartInfo() 
     { 
      FileName = IIS_EXPRESS, 
      Arguments = arguments.ToString(), 
      RedirectStandardOutput = true, 
      UseShellExecute = false, 
      CreateNoWindow = true 
     }); 

काम करना चाहिए, फिर भी चाल है कि आप, इतना है कि यह बंदरगाह 80 का स्वामित्व लेने के कर सकते हैं दूसरे शब्दों में सेवा की पहचान के लिए एसीएल प्रदान करने की आवश्यकता आपके सेटअप प्रोग्राम के दौरान होता है (यह मानते हुए आपके पास एक एमएसआई जो ऊंचा हो जाएगा), इसे कमांड लाइन चलाएं: नेट्स http http urlacl url = http: // जो भी माचिन नाम: 80/उपयोगकर्ता = हर कोई

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

+0

मुझे पता है कि यह एक पुराना धागा है, लेकिन मैं यह वही काम करने की कोशिश कर रहा हूं, फिर भी मैं इसे 32-बिट iisexpress.exe के साथ काम करने के लिए नहीं प्राप्त कर सकता: सी प्रोग्राम \ x86) \ IIS एक्सप्रेस में पाया गया। केवल 64-बिट iisexpress.exe किसी कारण से काम करता है। – Dan

3

उपयोग करने के लिए व्यवस्थापक के रूप में आईआईएस 7.5 चलाने के लिए, बस थोड़ा अपना कोड बदलें चाहते हैं:

Process process = Process.Start(new ProcessStartInfo() 
{ 
    FileName = IIS_EXPRESS, 
    Arguments = arguments.ToString(), 
    RedirectStandardOutput = true, 
    UseShellExecute = true, 
    CreateNoWindow = true, 
    Verb = "runas" 
}); 

यह भी आप के लिए सक्षम हो जाएगा पोर्ट 80 पर अपनी साइट चलाएं।

0

मुझे पता है कि यह एक पुरानी पोस्ट है, लेकिन क्या आपने माइक्रोसॉफ्ट की एसआरवीएवाई सेवा रैपर माना है?

यह विंडोज सेवा (किसी भी प्रमाण पत्र के तहत) के रूप में स्थापित और चलाता है, और आपकी प्रक्रिया को विंडोज़ प्रक्रिया में लॉन्च करता है।

कुछ भी आप एक कमांड लाइन से चला सकते हैं (या प्रारंभ/भागो विंडो), आप SRVANY के माध्यम से एक सेवा के रूप में चला सकते हैं: http://www.tacktech.com/display.cfm?ttid=197