it-swarm-eu.dev

Jak mohu získat název aktuálního spustitelného souboru v jazyce C #?

Chci získat název aktuálně spuštěného programu, to je spustitelný název programu. V C/C++ se dostanete z args[0].

314
Joakim
System.AppDomain.CurrentDomain.FriendlyName
377
Steven A. Lowe

System.AppDomain.CurrentDomain.FriendlyName - Vrací název souboru s příponou (např. MyApp.exe). 

System.Diagnostics.Process.GetCurrentProcess().ProcessName - Vrací název souboru bez přípony (např. MyApp).

System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName - Vrátí úplnou cestu a název souboru (např. C: Příklady Zpracuje MyApp.exe). Pak byste to mohli předat do System.IO.Path.GetFileName() nebo System.IO.Path.GetFileNameWithoutExtension(), abyste dosáhli stejných výsledků jako výše.

206
Lee Grissom

System.Diagnostics.Process.GetCurrentProcess() dostává právě spuštěný proces. K určení názvu můžete použít vlastnost ProcessName . Níže je ukázková aplikace konzoly.

using System;
using System.Diagnostics;

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine(Process.GetCurrentProcess().ProcessName);
        Console.ReadLine();
    }
}
100
Aaron Daniels

To by mělo stačit:

Environment.GetCommandLineArgs()[0];
90
James B

Toto je kód, který pro mě pracoval:

string fullName = Assembly.GetEntryAssembly().Location;
string myName = Path.GetFileNameWithoutExtension(fullName);

Všechny výše uvedené příklady mi daly název_procesu s názvem vshost nebo běžícím jménem dll.

20
Tal Segal

Zkuste to:

System.Reflection.Assembly.GetExecutingAssembly()

To vám vrátí instanci System.Reflection.Assembly , která má všechna data, která byste kdy chtěli vědět o aktuální aplikaci. Myslím, že vlastnost Location může získat to, co jste po specificky.

18
Andrew Hare

Proč to nikdo nenavrhl, je to jednoduché.

Path.GetFileName(Application.ExecutablePath)
11
xmen
System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name;

vám dá FileName vaší aplikace jako; "MyApplication.exe"

11
Teoman shipahi

Několik dalších možností:

  • System.Reflection.Assembly.GetExecutingAssembly().GetName().Name
  • Path.GetFileName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase
9
JohnB
  • System.Reflection.Assembly.GetEntryAssembly().Location vrací umístění jména exe, pokud není shromáždění načteno z paměti.
  • System.Reflection.Assembly.GetEntryAssembly().CodeBase vrátí umístění jako URL.
8
langpavel

Potřebujete-li k nastavení pravidla brány firewall název programu, použijte:

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

To zajistí, že název je správný jak při ladění v aplikaci VisualStudio, tak při spuštění aplikace přímo v systému Windows.

7
Mark Uebel

Pokud si nejste jisti nebo máte pochybnosti, běžte v kruzích, křičet a křičet. 

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");
    }
}

Nemohu tvrdit, že jsem otestoval každou možnost, ale neudělá nic hloupého, jako je návrat vhostu během ladění.

7
Orwellophile

Pokud hledáte informace o plné cestě spustitelného souboru, spolehlivým způsobem je použít následující:

   var executable = System.Diagnostics.Process.GetCurrentProcess().MainModule
                       .FileName.Replace(".vshost", "");

To eliminuje jakékoli problémy s prostředními dll, vshost, atd.

5
theMayer

Můžete použít Environment.GetCommandLineArgs() pro získání argumentů a Environment.CommandLine pro získání aktuálního příkazového řádku jako zadaného.

Také můžete použít Assembly.GetEntryAssembly() nebo Process.GetCurrentProcess() .

Při ladění byste však měli být opatrní, protože tento poslední příklad může poskytnout název spustitelného programu debuggeru (v závislosti na tom, jak připojíte ladicí program), spíše než spustitelný soubor, stejně jako další příklady.

4
Jeff Yates

To je to, co chcete:

Assembly.GetExecutingAssembly ().Location
2

Pro aplikace systému Windows (formuláře a konzoly) používám toto:

Přidat odkaz na System.Windows.Forms ve VS pak:

using System.Windows.Forms;
namespace whatever
{
    class Program
    {
        static string ApplicationName = Application.ProductName.ToString();
        static void Main(string[] args)
        {
            ........
        }
    }
}

To funguje správně pro mě, zda používám skutečný spustitelný soubor nebo ladění v rámci VS.

Všimněte si, že vrátí název aplikace bez přípony.

John

1
John

Zkuste Application.ExecutablePath

0
Bean

To funguje, pokud potřebujete pouze název aplikace bez přípony:

 Path.GetFileNameWithoutExtension(AppDomain.CurrentDomain.FriendlyName);
0
RJN

Na .Net Core (nebo Mono), většina odpovědí nebude platit, když binární definování procesu je runtime binární Mono nebo .Net Core (dotnet) a ne vaše skutečná aplikace, která vás zajímá. , použij toto:

var myName = Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetEntryAssembly().Location);
0
Tobias

Super snadné, zde:

Environment.CurrentDirectory + "\\" + Process.GetCurrentProcess().ProcessName

0