Quero obter o nome do programa em execução no momento, que é o nome do executável do programa. Em C / C ++, você obtém args[0]
.
Quero obter o nome do programa em execução no momento, que é o nome do executável do programa. Em C / C ++, você obtém args[0]
.
Respostas:
System.AppDomain.CurrentDomain.FriendlyName
System.AppDomain.CurrentDomain.FriendlyName
aplicativos implantados Click-Once. Para nós, isso está retornando " DefaultDomain ", e não o nome do exe original.
string file = object_of_type_in_application_assembly.GetType().Assembly.Location; string app = System.IO.Path.GetFileNameWithoutExtension( file );
System.AppDomain.CurrentDomain.FriendlyName
- Retorna o nome do arquivo com extensão (por exemplo, MyApp.exe).
System.Diagnostics.Process.GetCurrentProcess().ProcessName
- Retorna o nome do arquivo sem extensão (por exemplo, MyApp).
System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName
- Retorna o caminho completo e o nome do arquivo (por exemplo, C: \ Examples \ Processes \ MyApp.exe). Você pode passar isso para System.IO.Path.GetFileName()
ou System.IO.Path.GetFileNameWithoutExtension()
obter os mesmos resultados acima.
/?
opção), porque o uso da extensão e do caminho apenas o torna desnecessário.
GetCurrentProcess()
Process.GetCurrentProcess().ProcessName()
retorna MyApp.vshost para mim.
System.Diagnostics.Process.GetCurrentProcess()
obtém o processo atualmente em execução. Você pode usar a ProcessName
propriedade para descobrir o nome. Abaixo está um exemplo de aplicativo de console.
using System;
using System.Diagnostics;
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Process.GetCurrentProcess().ProcessName);
Console.ReadLine();
}
}
.../bin/mono
* nixes ou .../mono.exe
do Windows.
Isso deve ser suficiente:
Environment.GetCommandLineArgs()[0];
Environment.GetCommandLineArgs()
é o análogo C # exato argv
do C / C ++.
Path.GetFileNameWithoutExtension(Environment.GetCommandLineArgs()[0])
Este é o código que funcionou para mim:
string fullName = Assembly.GetEntryAssembly().Location;
string myName = Path.GetFileNameWithoutExtension(fullName);
Todos os exemplos acima me deram o processName com vshost ou o nome da dll em execução.
Tente o seguinte:
System.Reflection.Assembly.GetExecutingAssembly()
Isso retorna uma System.Reflection.Assembly
instância que possui todos os dados que você poderia querer saber sobre o aplicativo atual. Eu acho que a Location
propriedade pode obter o que você procura especificamente.
CodeBase
vez de Location
, caso o recurso de cópia de sombra do .NET esteja ativo. Veja blogs.msdn.com/suzcook/archive/2003/06/26/…
System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name;
dará a você o nome do arquivo do seu aplicativo; "MyApplication.exe"
Por que ninguém sugeriu isso, é simples.
Path.GetFileName(Application.ExecutablePath)
Application.ExecutablePath
's código fonte .
Mais algumas opções:
System.Reflection.Assembly.GetExecutingAssembly().GetName().Name
Path.GetFileName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase
Se você precisar do nome do programa para configurar uma regra de firewall, use:
System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName
Isso garantirá que o nome esteja correto ao depurar no VisualStudio e ao executar o aplicativo diretamente no Windows.
Quando incerto ou em dúvida, corra em círculos, grite e grite.
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");
}
}
Não posso afirmar que testei cada opção, mas não faz nada estúpido como retornar o vhost durante as sessões de depuração.
System.Reflection.Assembly.GetEntryAssembly().Location
retorna a localização do nome do exe se o assembly não for carregado da memória.System.Reflection.Assembly.GetEntryAssembly().CodeBase
retorna o local como URL.Se você está procurando as informações completas do caminho do seu executável, a maneira confiável de fazer isso é usar o seguinte:
var executable = System.Diagnostics.Process.GetCurrentProcess().MainModule
.FileName.Replace(".vshost", "");
Isso elimina quaisquer problemas com dlls intermediárias, vshost etc.
Você pode usar Environment.GetCommandLineArgs()
para obter os argumentos e Environment.CommandLine
obter a linha de comando real conforme inserida.
Além disso, você pode usar Assembly.GetEntryAssembly()
ou Process.GetCurrentProcess()
.
No entanto, ao depurar, você deve ter cuidado, pois este exemplo final pode fornecer o nome do executável do depurador (dependendo de como você anexa o depurador) ao invés do executável, como os outros exemplos.
Environment.CommandLine
fornece o caminho absoluto, não a linha de comando inserida, pelo menos no Mono / Linux.
É isso que voce quer:
Assembly.GetExecutingAssembly ().Location
No .Net Core (ou Mono), a maioria das respostas não se aplica quando o binário que define o processo é o binário de tempo de execução do Mono ou .Net Core (dotnet) e não o aplicativo real em que você está interessado. , usa isto:
var myName = Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetEntryAssembly().Location);
GetEntryAssembly()
pode retornar nulo.
Para aplicativos do Windows (formulários e console), uso este:
Adicione uma referência ao System.Windows.Forms no VS e, em seguida:
using System.Windows.Forms;
namespace whatever
{
class Program
{
static string ApplicationName = Application.ProductName.ToString();
static void Main(string[] args)
{
........
}
}
}
Isso funciona corretamente para mim, esteja eu executando o executável real ou depurando no VS.
Observe que ele retorna o nome do aplicativo sem a extensão.
John
Super fácil, aqui:
Environment.CurrentDirectory + "\\" + Process.GetCurrentProcess().ProcessName
Para obter o caminho e o nome
System.Diagnostics.Process.GetCurrentProcess (). MainModule.FileName