Como obter o nome e a versão da aplicação exe em C# Compact Framework
a minha aplicação tem um exe e usa alguns DLLs. Estou a escrever tudo em C#.
em um DLL quero escrever um método para obter o nome da aplicação e a versão da Informação da versão no exe.
Eu entendo que na íntegra. net eu poderia usar Getentry Assembly, mas que isso não está disponível em CF.4 answers
Obtendo o nome da aplicação:
System.Reflection.Assembly.GetExecutingAssembly().GetName().Name;
Obtendo a versão:
System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;
Você pode querer usar GetCallingAssembly()
ou obter a montagem por tipo (por exemplo typeof(Program).Assembly
) Se o seu DLL estiver a tentar obter a versão EXE e não tiver acesso imediato a ela.
EDITAR
Se você tem um DLL e você precisa do nome do executável você tem algumas opções, dependendo do caso de uso. Você pode obter a montagem de um tipo contido na montagem EXE, mas uma vez que seria raro para que o DLL faça referência ao EXE, ele requer o passe EXE em um objeto desse tipo.
Version GetAssemblyVersionFromObjectType(object o)
{
o.GetType().Assembly.GetName().Version;
}
Você também poderia fazer um pouco de um final como este:
[DllImport("coredll.dll", SetLastError = true)]
private static extern int GetModuleFileName(IntPtr hModule, StringBuilder lpFilename, int nSize);
...
var name = new StringBuilder(1024);
GetModuleFileName(IntPtr.Zero, name, 1024);
var version = Assembly.LoadFrom(name.ToString()).GetName().Version;
System.Reflection.Assembly.GetEntryAssembly().GetName().Version;
Esta função irá dar a versão da aplicação de onde as outras bibliotecas são carregadas.
System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;
Isto dará a versão da biblioteca actual. Se você chamar isso na biblioteca de aplicativos você vai obter a versão de aplicação e se chamar isso em um DLL, então vai obter essa versão DLL.
Então, na minha opinião ... é função currect para usar.Se quiser criar um componente (.dll) use em outra referência da aplicação para obter o nome e a versão principais da aplicação, você pode usar desta forma:
Obtendo o nome principal da aplicação:
AppDomain.CurrentDomain.DomainManager.EntryAssembly.GetName().Name;
Obtendo a versão:
AppDomain.CurrentDomain.DomainManager.EntryAssembly.GetName().Version.ToString();
Obter o nome completo (conter: nome da aplicação, versão da aplicação, cultura, publickeyoken):
AppDomain.CurrentDomain.DomainManager.EntryAssembly.FullName;
Mas nesta solução há um problema, isto é, depende da máquina e se correr directamente do ficheiro executável, o erro irá ocorrer. Portanto, as seguintes eleições:
Obtendo o nome principal da aplicação:
string appName = AppDomain.CurrentDomain.FriendlyName;
appName = appName.Substring(0, appName.IndexOf('.'));
Obtendo a versão:
System.Windows.Forms.Application.ProductVersion;
Pode tentar usar FileInfo
Classe FileVersionInfo
. Espero que isto ajude..
Você também pode tentar a API Win32 como GetModuleFile ()