2009-07-14 5 views
6

मैं सी # में एक विंडोज़ सेवा लिख ​​रहा हूं जो कि मैं लिख रहा हूं किसी अन्य एप्लिकेशन के कई उदाहरणों को जन्म देता है। एक मौका है कि आवेदन मशीन पर कहीं भी स्थापित किया जा सकता है। सेवा को यह कहने का सबसे अच्छा तरीका क्या है कि एप्लिकेशन कहां स्थित है?किसी एप्लिकेशन के स्थान को निर्धारित करने का उचित तरीका क्या है?

उत्तर

6

यदि आप का मतलब है कि सेवा शुरू होता है एक अलग ऐप्लिकेशन खोलें, फिर; विकल्प:

  • कॉन्फ़िगरेशन फ़ाइल के साथ सेवा को कॉन्फ़िगर करें; वहाँ
  • में पथ डाल स्थापना के दौरान
  • उपयोग कुछ सदृश करने के लिए कॉम/COM + रजिस्ट्री में कुछ डाल पंजीकरण
  • पर विचार GAC यदि अन्य अनुप्रयोग .NET है (हालांकि मैं एक प्रशंसक नहीं हूँ। ..)
  • पर्यावरण चर?

व्यक्तिगत रूप से, मुझे कॉन्फ़िगरेशन फ़ाइल विकल्प पसंद है; यह सरल और बनाए रखने के लिए आसान है, और अधिक अलग-अलग (साइड-बाई-साइड) सेवाओं और एप्लिकेशन इंस्टॉल

+0

मैं इस परिदृश्य में जीएसी का उपयोग करने के बारे में और जानना चाहता हूं, हालांकि मुझे खतरे से अवगत है कि यह कैसे काम करेगा? कॉन्फ़िगरेशन फ़ाइल के बारे में क्या, यह एम्बेडेड होगा? यदि यह एम्बेडेड नहीं है, तो सेवा के लिए कॉन्फ़िगरेशन कहां मौजूद है? – Firoso

+0

मैं शायद कॉन्फ़िगरेशन फ़ाइल विधि के साथ जा रहा हूं, लेकिन मैं इस तरह से जीएसी का उपयोग करने के बारे में और जानना चाहूंगा। – MGSoto

1
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"); 
+0

यह एक सेवा में काम नहीं करेगा, जिसमें फॉर्म – Treb

+0

नहीं है कोई सेवा बिना किसी समस्या के विंडोज़ फॉर्मों का संदर्भ दे सकती है। उपरोक्त रेखा वास्तव में किसी भी रूप का उपयोग नहीं करती है, और ठीक होना चाहिए। लेकिन कोडबेस प्राप्त करने के आसान तरीके हैं! –

+0

क्षमा करें, प्रश्न को गलत समझा - मैंने सोचा कि वह सेवा का स्थान प्राप्त करना चाहता था। – Treb

8

आप अपनी सेवा के लिए निम्न कोड

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(); 
} 
1

System.Environment.CurrentDirectory के लिए एक अनुरोध करना चाहिए की जरूरत है

1

स्थापना के दौरान एक रजिस्ट्री चर लिखें, इस तरह अपग्रेड देने पर आप पहले से चुने गए उपयोगकर्ताओं को पहले लिखे गए और डिफ़ॉल्ट मान को वापस पढ़ सकते हैं।