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]
.
c#
command-line
Joakim
fonte
fonte
Respostas:
fonte
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 paraSystem.IO.Path.GetFileName()
ouSystem.IO.Path.GetFileNameWithoutExtension()
obter os mesmos resultados acima.fonte
/?
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 aProcessName
propriedade para descobrir o nome. Abaixo está um exemplo de aplicativo de console.fonte
.../bin/mono
* nixes ou.../mono.exe
do Windows.Isso deve ser suficiente:
fonte
Environment.GetCommandLineArgs()
é o análogo C # exatoargv
do C / C ++.Path.GetFileNameWithoutExtension(Environment.GetCommandLineArgs()[0])
Este é o código que funcionou para mim:
Todos os exemplos acima me deram o processName com vshost ou o nome da dll em execução.
fonte
Tente o seguinte:
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 aLocation
propriedade pode obter o que você procura especificamente.fonte
CodeBase
vez deLocation
, caso o recurso de cópia de sombra do .NET esteja ativo. Veja blogs.msdn.com/suzcook/archive/2003/06/26/…dará a você o nome do arquivo do seu aplicativo; "MyApplication.exe"
fonte
Por que ninguém sugeriu isso, é simples.
fonte
Application.ExecutablePath
's código fonte .Mais algumas opções:
System.Reflection.Assembly.GetExecutingAssembly().GetName().Name
Path.GetFileName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase
fonte
Se você precisar do nome do programa para configurar uma regra de firewall, use:
Isso garantirá que o nome esteja correto ao depurar no VisualStudio e ao executar o aplicativo diretamente no Windows.
fonte
Quando incerto ou em dúvida, corra em círculos, grite e grite.
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.
fonte
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.fonte
Se você está procurando as informações completas do caminho do seu executável, a maneira confiável de fazer isso é usar o seguinte:
Isso elimina quaisquer problemas com dlls intermediárias, vshost etc.
fonte
Você pode usar
Environment.GetCommandLineArgs()
para obter os argumentos eEnvironment.CommandLine
obter a linha de comando real conforme inserida.Além disso, você pode usar
Assembly.GetEntryAssembly()
ouProcess.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.
fonte
Environment.CommandLine
fornece o caminho absoluto, não a linha de comando inserida, pelo menos no Mono / Linux.É isso que voce quer:
fonte
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:
fonte
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:
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
fonte
Super fácil, aqui:
fonte
Isso funciona se você precisar apenas do nome do aplicativo sem extensão:
fonte
Para obter o caminho e o nome
System.Diagnostics.Process.GetCurrentProcess (). MainModule.FileName
fonte