2012-06-26 8 views
5

मैंने एक विंडोज सेवा बनाई है जो c:\Program Files\My Service निर्देशिका में स्थापित हो जाती है। निष्पादन योग्य के साथ, मेरे पास एक एक्सएमएल फ़ाइल है जो एक ही निर्देशिका में स्थापित हो जाती है। उपयोगकर्ता द्वारा परिभाषित जानकारी प्राप्त करने के लिए यह XML फ़ाइल सेवा द्वारा उपयोग की जाती है।विंडोज सेवा से टेक्स्ट फ़ाइल कैसे पढ़ा जाए?

सेवा मैं फ़ाइल को पढ़ने के रूप में अगर यह निष्पादन योग्य .. उदाहरण के लिए स्थानीय थे की कोड में:

:

DataSet ds = new DataSet(); 
ds.ReadXml("Foo.xml"); 

हालांकि, जब मैं सेवा चलाने के लिए, सेवा एक अपवाद कह फेंकता

नहीं मिल सका फ़ाइल 'C: \ Windows \ System32 \ Foo.xml'

c:\Program Files\My Service में निष्पादन योग्य जीवन के बाद से मैं Windows सेर की उम्मीद c:\Program Files\My Service\Foo.xml में XML फ़ाइल को देखने के लिए। जाहिर है, यह मामला नहीं है।

मैं उसी स्थान पर Foo.xml फ़ाइल के लिए (अपेक्षाकृत) सेवा को मजबूर कैसे कर सकता हूं जहां सेवा निष्पादन योग्य रहता है?

System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Foo.xml"); 
+0

के संभावित डुप्लिकेट करना है [मैं कैसे सी # का उपयोग कर एक Windows सेवा की निर्देशिका स्थापित मिल रहा है,?] (Http://stackoverflow.com/questions/491735/how-do-i-find-the-install-directory-of-a-windows-service-using-c) –

+1

बस एक विचार, आपको * कॉन्फ़िगर करने योग्य एप्लिकेशन सेटिंग्स को स्टोर नहीं करना चाहिए प्रोग्राम पथ निर्देशिका को इस पथ को संशोधित करने के लिए एक्सेस के रूप में विशेषाधिकार की आवश्यकता होती है। इसके बजाय 'एप्लिकेशनडेटा'/'लोकल ऐप्लिकेशनडेटा 'का उपयोग करने पर विचार करें। –

+0

@QuintinRobinson - अनुस्मारक के लिए धन्यवाद! +1 – Jed

उत्तर

10

इस प्रयोग की जरूरत है आप मिल जाएगा।

आदेश अपेक्षा के अनुरूप अपने xml फ़ाइल को पढ़ने के लिए है, तो आप नीचे के रूप में

DataSet ds = new DataSet(); 
ds.ReadXml(Path.Combine(System.Reflection.Assembly.GetExecutingAssembly().Location, "Foo.xml")); 
0

यह है कि तुम क्या

DataSet ds = new DataSet(); 
ds.ReadXml(System.IO.Path.Combine(System.Reflection.Assembly.GetExecutingAssembly().Location,"Foo.xml"); 
+1

... सिवाय इसके कि आप उस पथ को हार्ड-कोड नहीं करना चाहते हैं जिसे उपयोगकर्ता इंस्टॉलेशन पर बदल सकता है। –

+0

मैं फ़ाइल के पथ को हार्ड-कोडिंग से बचना चाहता हूं। मैं फ़ाइल के संदर्भ निष्पादन योग्य के सापेक्ष होना चाहता हूं। – Jed

+0

इसे बदल दिया गया है ताकि –

0

खिड़कियों सेवा कार्यशील निर्देशिका के रूप में C:: \ Windows \ System32