2008-10-14 3 views
57

के लिए पूरा पथ प्राप्त करना मैं उस फ़ोल्डर को कैसे ढूंढ सकता हूं जहां विंडोज सेवा .exe फ़ाइल गतिशील रूप से स्थापित है?विंडोज सेवा

Path.GetFullPath(relativePath); 

C:\WINDOWS\system32 निर्देशिका पर आधारित पथ देता है।

हालांकि, XmlDocument.Load(string filename) विधि निर्देशिका के अंदर सापेक्ष पथ के विरुद्ध काम कर रही प्रतीत होती है जहां सेवा .exe फ़ाइल स्थापित है।

उत्तर

82

प्रयास करें

System.Reflection.Assembly.GetEntryAssembly().Location 
+1

लघु और मिठाई। :) –

+3

"System.Reflection.Assembly.GetEntryAssembly()" मेरी सेवा के लिए शून्य है। –

+2

Curtis Yallop answser को देखो। काफी बेहतर! –

-4

यह आपको पथ देना चाहिए कि निष्पादन योग्य रहता है में:

Environment.CurrentDirectory; 

यदि नहीं, तो आप की कोशिश कर सकते:

Directory.GetParent(Assembly.GetEntryAssembly().Location).FullName 

एक और अधिक hacky, लेकिन कार्यात्मक तरीका:

Path.GetFullPath("a").TrimEnd('a') 

:)

+5

-1: पर्यावरण। वर्तमान डायरेक्टरी और आपके हैकी समाधान दोनों वर्तमान कार्यशील निर्देशिका को वापस कर देते हैं, जो ओपी कहता है कि system32 निर्देशिका है। – Joe

5

यह हमारी खिड़कियों सेवा के लिए काम करता है:

//CommandLine without the first and last two characters 
//Path.GetDirectory seems to have some difficulties with these (special chars maybe?) 
string cmdLine = Environment.CommandLine.Remove(Environment.CommandLine.Length - 2, 2).Remove(0, 1); 
string workDir = Path.GetDirectoryName(cmdLine); 

यह आपको निष्पादन का निरपेक्ष पथ देना चाहिए।

5

ऊपर का एक और संस्करण:

string path = Assembly.GetExecutingAssembly().Location; 
FileInfo fileInfo = new FileInfo(path); 
string dir = fileInfo.DirectoryName; 
38
Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location) 
3

Environment.CurrentDirectory वर्तमान निर्देशिका जहां कार्यक्रम चल रहा है देता है। विंडोज़ सेवा के मामले में,% WINDIR%/system32 पथ लौटाता है, जहां निष्पादन योग्य तैनात किए जाने के बजाए निष्पादन योग्य होगा।

65

इस प्रयास करें:

AppDomain.CurrentDomain.BaseDirectory 

(बस यहाँ की तरह: How to find windows service exe path)

+0

+1 यह समाधान चयनित एक से बेहतर है। –

+1

इसके लिए धन्यवाद। मेरे पास NServiceBus सेवा थी, और चूंकि यह NServiceBus.Host.exe में लपेटा गया है, इसलिए 'GetEntryAssembly()' मेरी वास्तविक प्रोजेक्ट में शून्य थी। हालांकि यह पूरी तरह से काम किया। – Matt