मैं सिर्फ Application.ExecutablePath
के स्रोत कोड में देखा, और कार्यान्वयन अनिवार्य रूप से इस * है:
Assembly asm = Assembly.GetEntryAssembly();
string cb = asm.CodeBase;
var codeBase = new Uri(cb);
if (codeBase.IsFile)
return codeBase.LocalPath + Uri.UnescapeDataString(codeBase.Fragment);
else
return codeBase.ToString();
संपत्ति Assembly.CodeBase
एक यूआरआई के रूप में स्थान वापस आ जाएगी। कुछ की तरह:
file:///C:/myfolder/myfile.exe
#
यूआरआई में टुकड़ा मार्कर है; यह टुकड़े की शुरुआत को चिह्नित करता है। जाहिर है, Uri
वर्ग दिए गए यूरी को बदलता है जब इसे पार्स किया जाता है और फिर एक स्ट्रिंग में परिवर्तित कर दिया जाता है।
के बाद से Assembly.Location
एक 'सामान्य' फ़ाइल पथ है, मुझे लगता है अपने सबसे अच्छे विकल्प नहीं है:
string executablePath = Assembly().GetEntryAssembly().Location;
* ) कार्यान्वयन इस से अधिक जटिल है, क्योंकि यह भी स्थितियों में, जहां कई appdomains देखते हैं के साथ सौदों और अन्य विशेष स्थितियों। मैंने सबसे सामान्य स्थिति के लिए कोड को सरल बना दिया।
स्रोत
2012-10-18 01:51:03
मैं इसे पुन: उत्पन्न नहीं कर सकता। मेरे पास मेरा ऐप सी: \ my # \ project \ foo.exe से चल रहा है और यह एप्लिकेशन को लिखता है। जैसा कि आपने ऊपर लिखा है, एक्स्प्रेसेबलपैथ सही ढंग से लिखा है। जब आप डीबग करते हैं तो एप्लिकेशन करता है। एक्सचेंज करने योग्य पाथ सही तरीके से निरीक्षण करता है? क्या आप लिखने वाले पाठ पर कोई पोस्ट-प्रोसेसिंग कर रहे हैं जो यहां नहीं दिखाया गया है? – Joe
मैंने फ़ाइल को लिखने के लिए कोड के साथ, इसे एक नई परियोजना में फिर से परीक्षण किया। यह अभी भी पुनरुत्पादन करता है। इसका उपयोग करने वाला ढांचा 4.5 है यदि इससे कोई फर्क पड़ता है। – Ryan
दिलचस्प, विशेष रूप से नीचे एलियन की पोस्ट के प्रकाश में। आश्चर्य है कि मैंने अलग-अलग क्या किया (हालांकि मैंने 4.0 फ्रेमवर्क का उपयोग किया ...) – Joe