2009-09-22 16 views
8

Możliwe duplikaty:
Getting the path of the current assembly
C#: How do I get the path of the assembly the code is in?Jak zdobyć nazwy pliku .exe

Korzystanie z VB 2008, w jaki sposób mogę uzyskać nazwę pliku uruchomionego .EXE od wewnątrz siebie?

EDYCJA: Jest to aplikacja na konsolę, więc Application.ExecutablePath nie będzie działać.

+3

ten został poproszony wiele razy wcześniej na SO- spróbuj wyszukiwanie. Oto jeden, który znalazłem - http://stackoverflow.com/questions/864484/getting-the-path-the- current-assembly – RichardOD

+1

Również: http://stackoverflow.com/questions/52797/c-how-do -i-get-the-the-assembly-the-code-is-in To nie jest tak proste jak ExecutablePath, ponieważ niektóre złożenia są ładowane Click-Once –

+2

Poszukałem i nie znalazłem niczego. Teraz jest to oczywiste, ale szukałem .EXE, a nie zespołu. @RichardOD Spróbuj nie być palantem. – aphoria

Odpowiedz

16

Istnieje kilka sposobów.

Application.ExecutablePath 

lub

System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName 

lub

System.Reflection.Assembly.GetExecutingAssembly().Location 
+1

OK, ale aplikacja znajduje się w System.Windows.Forms. Czy to jest aplikacja WinForm? –

+0

Dziękuję bardzo za dodanie mojej odpowiedzi. –

+0

RRUZ, myślę, że Oplopanax ma dobry punkt o używaniu GetEntryAssembly zamiast GetExecutingAssembly. Podobnie, CodeBase jest lepszym wyborem niż lokalizacja, ponieważ nie zawiera również ścieżki. –

1

Process.GetCurrentProcess() MainModule

edit

Innym sposobem może być użycie Environment.GetCommandLineArgs() [0], ale wolę używać procesu.

+0

Steve musi być Process.GetCurrentProcess(). MainModule.Nazwa pliku – RRUZ

+2

To nie jest do końca poprawne: masz wybór między uzyskaniem nazwy pliku lub nazwy modułu. –

+0

ModuleName Pobiera główny moduł dla powiązanego procesu. nie nazwa pliku. – RRUZ

0

Powinieneś go znaleźć w obiekcie: Application.ExecutablePath

+0

Nie zabrałem ci głosu, ale możesz zauważyć, że RRUZ pod warunkiem, że jest odpowiedzią, zanim to zrobiłeś. –

+0

Ah, Ale zamieściłem link do dokumentacji, dlatego też podniosłem swoją odpowiedź (i także dlaczego pobił mnie o kilka sekund) –

+0

Dobrze, poprowadzę cię do neutralności. –

4

Zostało odpowiedział before.

Z dowolnego miejsca w kodzie mógł znajdować się zespół, który został załadowany przez źródłowy plik EXE. Możesz również nie mieć odniesienia do singletonu Application, więc użycie klasy Assembly jest najlepszym rozwiązaniem.

Najbezpieczniejszym sposobem jest Assembly.GetEntryAssembly(). Lokalizacja jest lokalizowana w systemie plików, w którym znajduje się obecnie Zgromadzenie. Jeśli jest to shadow copied, to jest to lokalizacja kopiowania w tle. Jeśli jest wdrożony po kliknięciu, jest to zwariowana ścieżka do pliku w obszarze sandbox.

Oryginalny lokalizacja zespołu będzie na Assembly.GetEntryAssembly().Codebase

+0

W przypadku wdrożenia jednokrotnego kliknięcia, czy metoda Proces zwróci użyteczny wynik? –

+1

Nie jestem do końca pewien, ale myślę, że metoda Proces otrzyma nazwę procesu uruchamiania clickonce w taki sam sposób, jak w przypadku aplikacji internetowej, że otrzyma proces roboczy IIS. –

Powiązane problemy