मैं सी # में एक विंडोज़ सेवा लिख रहा हूं जो कि मैं लिख रहा हूं किसी अन्य एप्लिकेशन के कई उदाहरणों को जन्म देता है। एक मौका है कि आवेदन मशीन पर कहीं भी स्थापित किया जा सकता है। सेवा को यह कहने का सबसे अच्छा तरीका क्या है कि एप्लिकेशन कहां स्थित है?किसी एप्लिकेशन के स्थान को निर्धारित करने का उचित तरीका क्या है?
उत्तर
यदि आप का मतलब है कि सेवा शुरू होता है एक अलग ऐप्लिकेशन खोलें, फिर; विकल्प:
- कॉन्फ़िगरेशन फ़ाइल के साथ सेवा को कॉन्फ़िगर करें; वहाँ
- में पथ डाल स्थापना के दौरान
- उपयोग कुछ सदृश करने के लिए कॉम/COM + रजिस्ट्री में कुछ डाल पंजीकरण
- पर विचार GAC यदि अन्य अनुप्रयोग .NET है (हालांकि मैं एक प्रशंसक नहीं हूँ। ..)
- पर्यावरण चर?
व्यक्तिगत रूप से, मुझे कॉन्फ़िगरेशन फ़ाइल विकल्प पसंद है; यह सरल और बनाए रखने के लिए आसान है, और अधिक अलग-अलग (साइड-बाई-साइड) सेवाओं और एप्लिकेशन इंस्टॉल
using System.IO;
using System.Windows.Forms;
string appPath = Path.GetDirectoryName(Application.ExecutablePath)
किसी एप्लिकेशन (उपरोक्त) के लिए Thats।
एक asp.net परियोजना के लिए:
using System.Web;
HttpContext.Current.Server.MapPath("place arguments here");
यह एक सेवा में काम नहीं करेगा, जिसमें फॉर्म – Treb
नहीं है कोई सेवा बिना किसी समस्या के विंडोज़ फॉर्मों का संदर्भ दे सकती है। उपरोक्त रेखा वास्तव में किसी भी रूप का उपयोग नहीं करती है, और ठीक होना चाहिए। लेकिन कोडबेस प्राप्त करने के आसान तरीके हैं! –
क्षमा करें, प्रश्न को गलत समझा - मैंने सोचा कि वह सेवा का स्थान प्राप्त करना चाहता था। – Treb
आप अपनी सेवा के लिए निम्न कोड
this.GetType().Assembly.Location
उपयोग कर सकते हैं आप के लिए स्थापित किया गया है फ़ोल्डर का पता लगाने की जरूरत है की अनुमति देता है
आप फ़ोल्डर कुछ अन्य आवेदन आप के लिए स्थापित किया गया है पता लगाने के लिए Windows इंस्टालर
[DllImport("MSI.DLL", CharSet = CharSet.Auto)]
private static extern UInt32 MsiGetComponentPath(
string szProduct,
string szComponent,
StringBuilder lpPathBuf,
ref int pcchBuf);
private static string GetComponentPath(string product, string component)
{
int pathLength = 1024;
StringBuilder path = new StringBuilder(pathLength);
MsiGetComponentPath(product, component, path, ref pathLength);
return path.ToString();
}
System.Environment.CurrentDirectory के लिए एक अनुरोध करना चाहिए की जरूरत है
स्थापना के दौरान एक रजिस्ट्री चर लिखें, इस तरह अपग्रेड देने पर आप पहले से चुने गए उपयोगकर्ताओं को पहले लिखे गए और डिफ़ॉल्ट मान को वापस पढ़ सकते हैं।
मैं इस परिदृश्य में जीएसी का उपयोग करने के बारे में और जानना चाहता हूं, हालांकि मुझे खतरे से अवगत है कि यह कैसे काम करेगा? कॉन्फ़िगरेशन फ़ाइल के बारे में क्या, यह एम्बेडेड होगा? यदि यह एम्बेडेड नहीं है, तो सेवा के लिए कॉन्फ़िगरेशन कहां मौजूद है? – Firoso
मैं शायद कॉन्फ़िगरेशन फ़ाइल विधि के साथ जा रहा हूं, लेकिन मैं इस तरह से जीएसी का उपयोग करने के बारे में और जानना चाहूंगा। – MGSoto