Şu anda çalışan programın adını almak istiyorum, bu programın yürütülebilir adıdır. C / C ++ 'da bunu alırsınız args[0]
.
Şu anda çalışan programın adını almak istiyorum, bu programın yürütülebilir adıdır. C / C ++ 'da bunu alırsınız args[0]
.
Yanıtlar:
System.AppDomain.CurrentDomain.FriendlyName
System.AppDomain.CurrentDomain.FriendlyName
Click-Once tarafından dağıtılan uygulamaları kullanmayla ilgili sorun yaşadık . Bizim için bu, orijinal exe adını değil, " DefaultDomain " döndürüyor .
string file = object_of_type_in_application_assembly.GetType().Assembly.Location; string app = System.IO.Path.GetFileNameWithoutExtension( file );
System.AppDomain.CurrentDomain.FriendlyName
- Uzantılı dosya adını döndürür (örn. MyApp.exe).
System.Diagnostics.Process.GetCurrentProcess().ProcessName
- dosya adı döndürür olmadan uzantısı (örneğin Uygulamam).
System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName
- Tam yolu ve dosya adını döndürür (örn. C: \ Örnekler \ İşlemler \ Uygulamam.exe). Daha sonra bunuSystem.IO.Path.GetFileName()
System.IO.Path.GetFileNameWithoutExtension()
yukarıdaki sonuçlarla aynı sonuçları elde etmek için veya .
/?
anahtar) için çok yararlıdır , çünkü uzantı ve yolu kullanmak gereksiz yere dağınıktır.
GetCurrentProcess()
Process.GetCurrentProcess().ProcessName()
MyApp.vshost benim için döner .
System.Diagnostics.Process.GetCurrentProcess()
çalışmakta olan işlemi alır. Sen kullanabilirsiniz ProcessName
adını anlamaya özelliği. Aşağıda örnek bir konsol uygulaması bulunmaktadır.
using System;
using System.Diagnostics;
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Process.GetCurrentProcess().ProcessName);
Console.ReadLine();
}
}
.../bin/mono
on * nixes veya .../mono.exe
Windows üzerinde bir çeşit olacaktır .
Bu yeterli olmalıdır:
Environment.GetCommandLineArgs()[0];
Environment.GetCommandLineArgs()
tam C # analogu argv
.
Path.GetFileNameWithoutExtension(Environment.GetCommandLineArgs()[0])
Bu benim için çalışan kod:
string fullName = Assembly.GetEntryAssembly().Location;
string myName = Path.GetFileNameWithoutExtension(fullName);
Yukarıdaki tüm örnekler bana vshost veya çalışan dll adı ile processName verdi.
Bunu dene:
System.Reflection.Assembly.GetExecutingAssembly()
Bu size System.Reflection.Assembly
geçerli uygulama hakkında bilmek isteyebileceğiniz tüm verileri içeren bir örnek döndürür . Location
Özellik sonra özellikle ne olduğunu alabilirsiniz düşünüyorum .
CodeBase
yerine kullanılması daha güvenli olabilir Location
. Bkz. Blogs.msdn.com/suzcook/archive/2003/06/26/…
System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name;
uygulamanızın DosyaAdı gibi; "MyApplication.exe"
Neden kimse bunu önermedi, bu basit.
Path.GetFileName(Application.ExecutablePath)
Application.ExecutablePath
bireyin kaynak kodu .
Birkaç seçenek daha:
System.Reflection.Assembly.GetExecutingAssembly().GetName().Name
Path.GetFileName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase
Güvenlik duvarı kuralı ayarlamak için Program adına ihtiyacınız varsa, şunu kullanın:
System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName
Bu, adın hem VisualStudio'da hata ayıklarken hem de uygulamayı doğrudan pencerelerde çalıştırırken doğru olmasını sağlayacaktır.
Belirsiz veya şüphe duyduğunuzda daireler çizin, çığlık atın ve bağırın.
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");
}
}
Her seçeneği test ettiğimi iddia edemem, ancak hata ayıklama oturumları sırasında vhost'u döndürmek gibi aptalca bir şey yapmaz.
System.Reflection.Assembly.GetEntryAssembly().Location
derleme bellekten yüklenmemişse exe adının konumunu döndürür.System.Reflection.Assembly.GetEntryAssembly().CodeBase
konumu URL olarak döndürür.Yürütülebilir dosyalarınızın tam yol bilgilerini arıyorsanız, bunu yapmanın güvenilir yolu aşağıdakileri kullanmaktır:
var executable = System.Diagnostics.Process.GetCurrentProcess().MainModule
.FileName.Replace(".vshost", "");
Bu aracı dll, vshost, vb ile ilgili sorunları ortadan kaldırır.
Environment.GetCommandLineArgs()
Bağımsız değişkenleri Environment.CommandLine
elde etmek ve girildiği gibi gerçek komut satırını elde etmek için kullanabilirsiniz .
Ayrıca, Assembly.GetEntryAssembly()
veya kullanabilirsiniz Process.GetCurrentProcess()
.
Ancak, hata ayıklarken dikkatli olmalısınız, çünkü bu son örnek diğer örneklerde olduğu gibi yürütülebilir dosya yerine hata ayıklayıcının yürütülebilir adını (hata ayıklayıcıyı nasıl eklediğinize bağlı olarak) verebilir.
Environment.CommandLine
en azından Mono / Linux'ta girilen komut satırını değil mutlak yolu verir.
İstediğiniz bu mu:
Assembly.GetExecutingAssembly ().Location
.Net Core (veya Mono) üzerinde, işlemi tanımlayan ikili, ilgilendiğiniz gerçek uygulamanız değil Mono veya .Net Core'un (dotnet) çalışma zamanı ikili dosyası olduğunda, yanıtların çoğu geçerli olmaz. , bunu kullan:
var myName = Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetEntryAssembly().Location);
GetEntryAssembly()
boş dönebilir.
Windows uygulamaları (formlar ve konsol) için bunu kullanıyorum:
VS'de System.Windows.Forms'a bir başvuru ekleyin ve ardından:
using System.Windows.Forms;
namespace whatever
{
class Program
{
static string ApplicationName = Application.ProductName.ToString();
static void Main(string[] args)
{
........
}
}
}
Bu gerçek çalıştırılabilir veya VS içinde hata ayıklama çalışıyorum benim için doğru çalışır.
Uzantı olmadan uygulama adını döndürdüğünü unutmayın.
John
Süper kolay, burada:
Environment.CurrentDirectory + "\\" + Process.GetCurrentProcess().ProcessName
Yolu ve ismi almak için
System.Diagnostics.Process.GetCurrentProcess (). MainModule.FileName