Chcę uzyskać nazwę aktualnie uruchomionego programu, czyli nazwę pliku wykonywalnego programu. W C / C ++ możesz to pobrać z args[0]
.
Chcę uzyskać nazwę aktualnie uruchomionego programu, czyli nazwę pliku wykonywalnego programu. W C / C ++ możesz to pobrać z args[0]
.
Odpowiedzi:
System.AppDomain.CurrentDomain.FriendlyName
System.AppDomain.CurrentDomain.FriendlyName
ramach Click-Once. Dla nas jest to zwrot „ DefaultDomain ”, a nie oryginalna nazwa exe.
string file = object_of_type_in_application_assembly.GetType().Assembly.Location; string app = System.IO.Path.GetFileNameWithoutExtension( file );
System.AppDomain.CurrentDomain.FriendlyName
- Zwraca nazwę pliku z rozszerzeniem (np. MyApp.exe).
System.Diagnostics.Process.GetCurrentProcess().ProcessName
- Zwraca nazwę pliku bez rozszerzenia (np. MyApp).
System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName
- Zwraca pełną ścieżkę i nazwę pliku (np. C: \ Examples \ Processes \ MyApp.exe). Następnie możesz przekazać to do System.IO.Path.GetFileName()
lub System.IO.Path.GetFileNameWithoutExtension()
osiągnąć takie same wyniki jak powyżej.
/?
przełącznik), ponieważ użycie rozszerzenia i ścieżki po prostu niepotrzebnie go zaśmieca.
GetCurrentProcess()
Process.GetCurrentProcess().ProcessName()
zwraca MyApp.vshost dla mnie.
System.Diagnostics.Process.GetCurrentProcess()
pobiera aktualnie uruchomiony proces. Możesz użyć ProcessName
właściwości, aby ustalić nazwę. Poniżej znajduje się przykładowa aplikacja na konsolę.
using System;
using System.Diagnostics;
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Process.GetCurrentProcess().ProcessName);
Console.ReadLine();
}
}
.../bin/mono
* nixes lub .../mono.exe
Windows.
To powinno wystarczyć:
Environment.GetCommandLineArgs()[0];
Environment.GetCommandLineArgs()
jest to dokładny analog C # argv
z C / C ++.
Path.GetFileNameWithoutExtension(Environment.GetCommandLineArgs()[0])
Oto kod, który działał dla mnie:
string fullName = Assembly.GetEntryAssembly().Location;
string myName = Path.GetFileNameWithoutExtension(fullName);
Wszystkie powyższe przykłady dały mi procesName z vshost lub działającą nazwą dll.
Spróbuj tego:
System.Reflection.Assembly.GetExecutingAssembly()
Zwraca to System.Reflection.Assembly
instancję, która zawiera wszystkie dane, które możesz chcieć wiedzieć o bieżącej aplikacji. Myślę, że Location
nieruchomość może dostać to, czego szukasz.
CodeBase
z Location
funkcji kopiowania w tle .NET może być bezpieczniejsze niż w przypadku. Zobacz blogs.msdn.com/suzcook/archive/2003/06/26/…
System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name;
da ci FileName twojej aplikacji jak; „MyApplication.exe”
Dlaczego nikt tego nie zasugerował, to proste.
Path.GetFileName(Application.ExecutablePath)
Application.ExecutablePath
„s kodu źródłowego .
Kilka dodatkowych opcji:
System.Reflection.Assembly.GetExecutingAssembly().GetName().Name
Path.GetFileName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase
Jeśli potrzebujesz nazwy programu do skonfigurowania reguły zapory, użyj:
System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName
Dzięki temu nazwa będzie poprawna zarówno podczas debugowania w VisualStudio, jak i podczas uruchamiania aplikacji bezpośrednio w systemie Windows.
W razie wątpliwości lub wątpliwości biegaj w kółko, krzycz i krzycz.
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");
}
}
Nie mogę twierdzić, że przetestowałem każdą opcję, ale nie robi nic głupiego, jak zwracanie vhosta podczas sesji debugowania.
System.Reflection.Assembly.GetEntryAssembly().Location
zwraca lokalizację nazwy exe, jeśli zestaw nie jest ładowany z pamięci.System.Reflection.Assembly.GetEntryAssembly().CodeBase
zwraca lokalizację jako adres URL.JEŻELI szukasz pełnej informacji o ścieżce pliku wykonywalnego, niezawodnym sposobem na to jest skorzystanie z następujących opcji:
var executable = System.Diagnostics.Process.GetCurrentProcess().MainModule
.FileName.Replace(".vshost", "");
Eliminuje to wszelkie problemy z bibliotekami pośredniczącymi, vshost itp.
Możesz użyć, Environment.GetCommandLineArgs()
aby uzyskać argumenty i Environment.CommandLine
uzyskać rzeczywistą linię poleceń, jak wprowadzono.
Możesz także użyć Assembly.GetEntryAssembly()
lub Process.GetCurrentProcess()
.
Jednak podczas debugowania należy zachować ostrożność, ponieważ ten ostatni przykład może podawać nazwę pliku wykonywalnego debuggera (w zależności od sposobu podłączenia debugera) zamiast pliku wykonywalnego, podobnie jak inne przykłady.
Environment.CommandLine
podaje bezwzględną ścieżkę, a nie wprowadzony wiersz poleceń, przynajmniej w Mono / Linux.
Czy to jest to, czego chcesz:
Assembly.GetExecutingAssembly ().Location
W .Net Core (lub Mono) większość odpowiedzi nie będzie miała zastosowania, gdy plik binarny definiujący proces jest plikiem binarnym Mono lub .Net Core (dotnet), a nie rzeczywistą aplikacją, którą jesteś zainteresowany. W takim przypadku , Użyj tego:
var myName = Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetEntryAssembly().Location);
GetEntryAssembly()
może zwrócić null.
W przypadku aplikacji Windows (formularze i konsola) używam tego:
Dodaj odwołanie do System.Windows.Forms w VS, a następnie:
using System.Windows.Forms;
namespace whatever
{
class Program
{
static string ApplicationName = Application.ProductName.ToString();
static void Main(string[] args)
{
........
}
}
}
Działa to dla mnie poprawnie, niezależnie od tego, czy uruchamiam plik wykonywalny, czy debuguję w VS.
Pamiętaj, że zwraca nazwę aplikacji bez rozszerzenia.
Jan
Super łatwe, tutaj:
Environment.CurrentDirectory + "\\" + Process.GetCurrentProcess().ProcessName
Aby uzyskać ścieżkę i nazwę
System.Diagnostics.Process.GetCurrentProcess (). MainModule.FileName