मैं एक उदाहरण के साथ शुरू करूंगा: अपाचे वेब सर्वर (विंडोज़ के तहत) में एक अच्छी सुविधा है: इसे एक स्टैंडअलोन एप्लिकेशन (वर्तमान उपयोगकर्ताओं के विशेषाधिकारों के साथ) के रूप में चलाया जा सकता है, और इसे विंडोज़ सेवा के रूप में स्थापित और चलाया जा सकता है सीधे (स्थानीय सिस्टम खाते के रूप में), एक ही निष्पादन योग्य का उपयोग कर।विंडोज़ सेवा एप्लिकेशन कैसे बनाएं ताकि यह एक स्टैंडअलोन प्रोग्राम के रूप में भी चलाया जा सके?
एक स्टैंडअलोन ऐप के रूप में चलाने के लिए आवेदन करने के लिए, इसे कुछ सार्वजनिक वर्ग में स्थिर सार्वजनिक मुख्य() रखने की ज़रूरत है।
आवेदन के लिए इंस्टॉल करने योग्य और चलाने योग्य होने के लिए, इसे किसी भी तरह से सर्विसबेस और इंस्टॉलर कक्षाओं को लागू करना होगा। लेकिन, यदि इस तरह का एप्लिकेशन स्टैंडअलोन ऐप के रूप में चलाया जाता है, तो यह संदेश बॉक्स दिखाएगा।
ऑपरेशन के इस अपाचे-जैसे मोड को कैसे प्राप्त किया जा सकता है? मेरा मानना है कि समाधान सरल है, लेकिन मुझे वास्तव में कोई विचार नहीं है कि कहां से शुरू करना है।
निम्नानुसार कोड का टुकड़ा सेवा का आह्वान करने के लिए उपयोग किया जाता है। क्या इसे स्टैंडअलोन उपयोग की अनुमति देने के लिए संशोधित किया जा सकता है?
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
static void Main()
{
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new Service() // defined elsewhere as Service : ServiceBase
};
ServiceBase.Run(ServicesToRun);
}
}
मेरी पसंद की भाषा सी # है।
संपादित करें: अलग विधानसभा में वर्तमान में, मैं निकाला गया है आम कोड (इसे Library.dll कॉल), और मैं दो निष्पादनयोग्य है: क्रमशः Console.exe और Service.exe, जो स्टैंडअलोन और खिड़कियों सेवा अनुप्रयोगों कर रहे हैं, , और दोनों पुस्तकालय.dll का आह्वान करने के लिए सिर्फ साधन हैं।
मेरा लक्ष्य उन दो निष्पादकों को एक में विलय करना है, जो अभी भी Library.dll पर कॉल करेंगे।
सावधान रहें: Environment.UserInteractive का उपयोग केवल यह जांचने के लिए किया जाता है कि कोई ग्राफिकल डेस्कटॉप सत्र है या नतीजा केवल यह निर्धारित करने के लिए उपयोग किया जाता है कि कोई संवाद या कंसोल संदेश दिखाना है या नहीं। डेस्कटॉप के साथ बातचीत करने की अनुमति देने वाली सेवा के रूप में चलते समय UserInteractive भी सही होगा। वास्तविक जांच मूल तरीकों के भीतर की जाती है। – Ishmaeel
@ इश्मीएल: धन्यवाद, अच्छा बिंदु। पता नहीं था कि इन दो तरीकों से संबंधित थे। क्या आपके पास देशी तरीकों का एक उदाहरण है जो इसकी जांच कर सकता है? –
स्पष्ट रूप से, सर्विसबेस केवल StartServiceCtrlDispatcher फ़ंक्शन (http://msdn.microsoft.com/en-us/library/ms686324(VS.85).aspx) को कॉल करता है और एक गैर-शून्य वापसी मूल्य (संभवतः) का अर्थ है कि आपको सेवा के रूप में लॉन्च नहीं किया गया है । बेशक, यह चेक के रूप में उपयोगी नहीं है क्योंकि यह एक बहुत ही ऑपरेशन है जिसे आप तय करना चाहते हैं कि निष्पादित करना है या नहीं। मैं अभी तक एक उचित चेक फ़ंक्शन नहीं ढूंढ पा रहा हूं। – Ishmaeel