Ş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.FriendlyNameClick-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 ProcessNameadı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/monoon * nixes veya .../mono.exeWindows ü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.Assemblygeç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 .
CodeBaseyerine 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.ExecutablePathbireyin kaynak kodu .
Birkaç seçenek daha:
System.Reflection.Assembly.GetExecutingAssembly().GetName().NamePath.GetFileName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBaseGü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.CommandLineelde 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.CommandLineen 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