Chcę uzyskać nazwę aktualnie uruchomionego programu, czyli nazwę pliku wykonywalnego programu. W C / C ++ możesz to pobrać z args[0]
.
c#
command-line
Joakim
źródło
źródło
Odpowiedzi:
źródło
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 doSystem.IO.Path.GetFileName()
lubSystem.IO.Path.GetFileNameWithoutExtension()
osiągnąć takie same wyniki jak powyżej.źródło
/?
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ę.źródło
.../bin/mono
* nixes lub.../mono.exe
Windows.To powinno wystarczyć:
źródło
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:
Wszystkie powyższe przykłady dały mi procesName z vshost lub działającą nazwą dll.
źródło
Spróbuj tego:
Zwraca to
System.Reflection.Assembly
instancję, która zawiera wszystkie dane, które możesz chcieć wiedzieć o bieżącej aplikacji. Myślę, żeLocation
nieruchomość może dostać to, czego szukasz.źródło
CodeBase
zLocation
funkcji kopiowania w tle .NET może być bezpieczniejsze niż w przypadku. Zobacz blogs.msdn.com/suzcook/archive/2003/06/26/…da ci FileName twojej aplikacji jak; „MyApplication.exe”
źródło
Dlaczego nikt tego nie zasugerował, to proste.
źródło
Application.ExecutablePath
„s kodu źródłowego .Kilka dodatkowych opcji:
System.Reflection.Assembly.GetExecutingAssembly().GetName().Name
Path.GetFileName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase
źródło
Jeśli potrzebujesz nazwy programu do skonfigurowania reguły zapory, użyj:
Dzięki temu nazwa będzie poprawna zarówno podczas debugowania w VisualStudio, jak i podczas uruchamiania aplikacji bezpośrednio w systemie Windows.
źródło
W razie wątpliwości lub wątpliwości biegaj w kółko, krzycz i krzycz.
Nie mogę twierdzić, że przetestowałem każdą opcję, ale nie robi nic głupiego, jak zwracanie vhosta podczas sesji debugowania.
źródło
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.źródło
JEŻELI szukasz pełnej informacji o ścieżce pliku wykonywalnego, niezawodnym sposobem na to jest skorzystanie z następujących opcji:
Eliminuje to wszelkie problemy z bibliotekami pośredniczącymi, vshost itp.
źródło
Możesz użyć,
Environment.GetCommandLineArgs()
aby uzyskać argumenty iEnvironment.CommandLine
uzyskać rzeczywistą linię poleceń, jak wprowadzono.Możesz także użyć
Assembly.GetEntryAssembly()
lubProcess.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.
źródło
Environment.CommandLine
podaje bezwzględną ścieżkę, a nie wprowadzony wiersz poleceń, przynajmniej w Mono / Linux.Czy to jest to, czego chcesz:
źródło
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:
źródło
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:
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
źródło
Super łatwe, tutaj:
źródło
Działa to, jeśli potrzebujesz tylko nazwy aplikacji bez rozszerzenia:
źródło
Aby uzyskać ścieżkę i nazwę
System.Diagnostics.Process.GetCurrentProcess (). MainModule.FileName
źródło