मैं वर्तमान में चल रहे कार्यक्रम का नाम प्राप्त करना चाहता हूं, जो कार्यक्रम का निष्पादन योग्य नाम है। C / C ++ में आप इसे प्राप्त करते हैं args[0]
।
मैं वर्तमान में चल रहे कार्यक्रम का नाम प्राप्त करना चाहता हूं, जो कार्यक्रम का निष्पादन योग्य नाम है। C / C ++ में आप इसे प्राप्त करते हैं args[0]
।
जवाबों:
System.AppDomain.CurrentDomain.FriendlyName
System.AppDomain.CurrentDomain.FriendlyName
क्लिक-वन्स परिनियोजित अनुप्रयोगों के तहत उपयोग करने के मुद्दे हैं। हमारे लिए, यह " DefaultDomain " लौटा रहा है , न कि मूल exe नाम।
string file = object_of_type_in_application_assembly.GetType().Assembly.Location; string app = System.IO.Path.GetFileNameWithoutExtension( file );
System.AppDomain.CurrentDomain.FriendlyName
- एक्सटेंशन के साथ फ़ाइल नाम लौटाता है (जैसे MyApp.exe)।
System.Diagnostics.Process.GetCurrentProcess().ProcessName
- बिना विस्तार के फ़ाइल नाम लौटाता है (जैसे MyApp)।
System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName
- पूर्ण पथ और फ़ाइल नाम लौटाता है (जैसे C: \ Examples \ Processes \ MyApp.exe)। फिर आप इसे पास कर सकते हैं System.IO.Path.GetFileName()
या System.IO.Path.GetFileNameWithoutExtension()
उपरोक्त परिणाम प्राप्त कर सकते हैं।
/?
स्विच) के लिए बहुत उपयोगी है , क्योंकि एक्सटेंशन और पथ का उपयोग करने से यह अनावश्यक रूप से अव्यवस्थित हो जाता है।
GetCurrentProcess()
Process.GetCurrentProcess().ProcessName()
मेरे लिए MyApp.vshost लौटाता है ।
System.Diagnostics.Process.GetCurrentProcess()
वर्तमान में चल रही प्रक्रिया हो जाती है। आप ProcessName
संपत्ति का उपयोग नाम पता लगाने के लिए कर सकते हैं । नीचे एक नमूना कंसोल ऐप है।
using System;
using System.Diagnostics;
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Process.GetCurrentProcess().ProcessName);
Console.ReadLine();
}
}
.../bin/mono
* nixes या .../mono.exe
विंडोज पर कुछ प्रकार का होगा ।
यह पर्याप्त होना चाहिए:
Environment.GetCommandLineArgs()[0];
Environment.GetCommandLineArgs()
सटीक सी # एनालॉग है argv
।
Path.GetFileNameWithoutExtension(Environment.GetCommandLineArgs()[0])
यह वह कोड है जो मेरे लिए काम करता है:
string fullName = Assembly.GetEntryAssembly().Location;
string myName = Path.GetFileNameWithoutExtension(fullName);
उपरोक्त सभी उदाहरणों ने मुझे vshost या रनिंग dll नाम के साथ प्रोसेसनाम दिया।
इसे इस्तेमाल करे:
System.Reflection.Assembly.GetExecutingAssembly()
यह आपको एक System.Reflection.Assembly
उदाहरण देता है जिसमें आपके पास सभी डेटा हैं जो आप कभी भी वर्तमान एप्लिकेशन के बारे में जानना चाहते हैं। मुझे लगता है कि Location
विशेष रूप से आपके पास संपत्ति हो सकती है।
CodeBase
बजाय उपयोग करने के लिए अधिक सुरक्षित हो सकता Location
है। ब्लॉगs.msdn.com/suzcook/archive/2003/06/26/… पर
System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name;
आपको अपने ऐप का FileName जैसे देगा; "MyApplication.exe"
किसी ने यह सुझाव क्यों नहीं दिया, इसका सरल।
Path.GetFileName(Application.ExecutablePath)
कुछ और विकल्प:
System.Reflection.Assembly.GetExecutingAssembly().GetName().Name
Path.GetFileName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase
यदि आपको फ़ायरवॉल नियम सेट करने के लिए प्रोग्राम नाम की आवश्यकता है, तो उपयोग करें:
System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName
यह सुनिश्चित करेगा कि VisualStudio में डिबगिंग करते समय और विंडोज़ में सीधे ऐप चलाने के दौरान नाम सही है।
जब अनिश्चित या संदेह में, हलकों में चलाएं, चिल्लाओ और चिल्लाओ।
class Ourself
{
public static string OurFileName() {
System.Reflection.Assembly _objParentAssembly;
if (System.Reflection.Assembly.GetEntryAssembly() == null)
_objParentAssembly = System.Reflection.Assembly.GetCallingAssembly();
else
_objParentAssembly = System.Reflection.Assembly.GetEntryAssembly();
if (_objParentAssembly.CodeBase.StartsWith("http://"))
throw new System.IO.IOException("Deployed from URL");
if (System.IO.File.Exists(_objParentAssembly.Location))
return _objParentAssembly.Location;
if (System.IO.File.Exists(System.AppDomain.CurrentDomain.BaseDirectory + System.AppDomain.CurrentDomain.FriendlyName))
return System.AppDomain.CurrentDomain.BaseDirectory + System.AppDomain.CurrentDomain.FriendlyName;
if (System.IO.File.Exists(System.Reflection.Assembly.GetExecutingAssembly().Location))
return System.Reflection.Assembly.GetExecutingAssembly().Location;
throw new System.IO.IOException("Assembly not found");
}
}
मैं प्रत्येक विकल्प का परीक्षण करने का दावा नहीं कर सकता, लेकिन यह डीबगिंग सत्र के दौरान vhost को वापस करने जैसा कुछ भी बेवकूफ नहीं करता है।
System.Reflection.Assembly.GetEntryAssembly().Location
एक्साइज़ नाम का रिटर्न स्थान यदि स्मृति से असेंबली लोड नहीं है।System.Reflection.Assembly.GetEntryAssembly().CodeBase
URL के रूप में स्थान देता है।यदि आप अपने निष्पादन योग्य की पूर्ण पथ जानकारी की तलाश में हैं, तो ऐसा करने का विश्वसनीय तरीका निम्नलिखित है:
var executable = System.Diagnostics.Process.GetCurrentProcess().MainModule
.FileName.Replace(".vshost", "");
यह मध्यस्थ dlls, vshost, आदि के साथ किसी भी मुद्दे को समाप्त करता है।
आप Environment.GetCommandLineArgs()
तर्कों Environment.CommandLine
को प्राप्त करने के लिए और प्रवेश के रूप में वास्तविक कमांड लाइन प्राप्त करने के लिए उपयोग कर सकते हैं ।
इसके अलावा, आप उपयोग कर सकते हैं Assembly.GetEntryAssembly()
या Process.GetCurrentProcess()
।
हालाँकि, डीबग करते समय, आपको सावधान रहना चाहिए क्योंकि यह अंतिम उदाहरण आपके डिबगर का निष्पादन योग्य नाम दे सकता है (आपके डिबगर के बजाय आप डिबगर कैसे संलग्न करते हैं) के आधार पर, अन्य उदाहरणों के अनुसार।
Environment.CommandLine
निरपेक्ष पथ देता है, दर्ज कमांड लाइन नहीं, कम से कम मोनो / लिनक्स पर।
क्या ये वही है जो तुम चाहते हो:
Assembly.GetExecutingAssembly ().Location
.नेट कोर (या मोनो) पर, अधिकांश जवाब तब लागू नहीं होंगे जब बाइनरी को परिभाषित करने की प्रक्रिया मोनो या .Net कोर (डॉटनेट) की रनटाइम बाइनरी है और न कि आपका वास्तविक आवेदन उस मामले में आपकी रुचि है। , इसे इस्तेमाल करो:
var myName = Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetEntryAssembly().Location);
GetEntryAssembly()
अशक्त लौट सकते हैं।
विंडोज़ ऐप्स (फ़ॉर्म और कंसोल) के लिए मैं इसका उपयोग करता हूं:
इसमें System.Windows.Forms का संदर्भ फिर VS में जोड़ें:
using System.Windows.Forms;
namespace whatever
{
class Program
{
static string ApplicationName = Application.ProductName.ToString();
static void Main(string[] args)
{
........
}
}
}
यह मेरे लिए सही ढंग से काम करता है कि क्या मैं वीएस के भीतर वास्तविक निष्पादन योग्य या डिबगिंग चला रहा हूं।
ध्यान दें कि यह एक्सटेंशन के बिना आवेदन नाम लौटाता है।
जॉन
सुपर आसान, यहाँ:
Environment.CurrentDirectory + "\\" + Process.GetCurrentProcess().ProcessName
रास्ता और नाम पाने के लिए
System.Diagnostics.Process.GetCurrentProcess ()। MainModule.FileName