2009-09-22 10 views
8

संभावित डुप्लिकेट:
Getting the path of the current assembly
C#: How do I get the path of the assembly the code is in?कैसे .EXE का फ़ाइल नाम पाने के लिए

वीबी 2008 का उपयोग कर, मैं कैसे अपने आप अंदर से एक चल .EXE का फ़ाइल नाम मिल सकता है?

EDIT: यह एक कंसोल ऐप के लिए है, इसलिए Application.ExecutablePath काम नहीं करेगा।

+3

में यह कई बार कहा गया है से पहले पर तथाकथित खोज का उपयोग कर प्रयास करें। यहां मुझे एक मिला है- http://stackoverflow.com/questions/864484/getting-the-path-of-the-current-assembly – RichardOD

+1

इसके अलावा: http://stackoverflow.com/questions/52797/c-how-do -इ-गेट-द-द-द-असेंबली-द-कोड-इन-इन यह निष्पादन योग्य पैथ जितना आसान नहीं है क्योंकि कुछ असेंबली लोड हो जाती हैं क्लिक-एक बार –

+2

मैंने खोज की और कुछ भी नहीं मिला। यह अब स्पष्ट है, लेकिन मैं .EXE को असेंबली नहीं खोज रहा था। @ रिचर्डोड झटका नहीं होने का प्रयास करें। – aphoria

उत्तर

16

कुछ तरीकों का उपयोग कर रहे हैं:।

Application.ExecutablePath 

या

System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName 

या

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

ठीक है, लेकिन एप्लिकेशन System.Windows.Forms में है। क्या यह एक WinForm ऐप है? –

+0

मेरा उत्तर जोड़ने के लिए बहुत बहुत धन्यवाद। –

+0

आरआरयूजेड, मुझे लगता है कि ओप्लोपैक्स के पास GetExecutingAssembly के बजाय GetEntryAssembly का उपयोग करने के बारे में एक अच्छा बिंदु है। इसी प्रकार, कोडबेस स्थान की तुलना में बेहतर विकल्प है, क्योंकि इसमें पथ भी शामिल नहीं है। –

1

Process.GetCurrentProcess() MainModule

संपादित

पर्यावरण का उपयोग करने का एक और तरीका हो सकता है। GETCommandLineArgs() [0], लेकिन मैं प्रक्रिया का उपयोग करना पसंद करता हूं।

+0

स्टीव प्रक्रिया होना चाहिए। GetCurrentProcess()। मुख्य मॉड्यूल।फ़ाइल नाम – RRUZ

+2

यह पूरी तरह से सही नहीं है: आपके पास फ़ाइल नाम या मॉड्यूलनाम प्राप्त करने के बीच कोई विकल्प है। –

+0

मॉड्यूलनाम संबंधित प्रक्रिया के लिए मुख्य मॉड्यूल प्राप्त करता है। फ़ाइल नाम नहीं। – RRUZ

0

आप संपत्ति में मिल जाना चाहिए: Application.ExecutablePath

+0

मैंने आपको कम नहीं किया है, लेकिन आप देख सकते हैं कि आरआरयूजेड ने आपके द्वारा किए गए जवाब देने से पहले जवाब दिया है। –

+0

आह, लेकिन मैंने प्रलेखन के लिए एक लिंक शामिल किया था, यही कारण है कि मैंने अपना जवाब रखा (और उसने मुझे कुछ सेकंड तक क्यों हराया) –

+0

ठीक है, मैं आपको तटस्थता के लिए उभारा दूंगा। –

4

यह before उत्तर दिया गया है।

अपने कोड में कहीं से भी आप एक ऐसे असेंबली में हो सकते हैं जो मूल EXE द्वारा लोड किया गया था। आपके पास एप्लिकेशन सिंगलटन का भी संदर्भ नहीं हो सकता है, इसलिए असेंबली क्लास का उपयोग करना आपकी सबसे अच्छी शर्त है।

सुरक्षित तरीका Assembly.GetEntryAssembly() है। लोकेशन फाइल सिस्टम पर स्थान प्राप्त करता है जहां असेंबली वर्तमान में है। यदि यह shadow copied है तो यह छाया-प्रति स्थान है। यदि यह क्लिक-एक बार तैनात किया गया है, तो यह sandbox क्षेत्र में फ़ाइल के लिए एक पागल पथ है।

विधानसभा के मूल स्थान हो जाएगा Assembly.GetEntryAssembly().Codebase

+0

क्लिक-एक बार तैनाती के मामले में, प्रक्रिया विधि एक उपयोगी परिणाम लौटाएगी? –

+1

मैं पूरी तरह से निश्चित नहीं हूं, लेकिन मुझे लगता है कि प्रोसेस विधि को क्लिकऑन्स लॉन्चर प्रक्रिया का नाम उसी तरह से मिलेगा जैसे वेब ऐप के लिए इसे आईआईएस कार्यकर्ता प्रक्रिया मिल जाएगी। –

संबंधित मुद्दे