Как получить имя и версию приложения exe в С# Compact Framework
Мое приложение имеет exe и использует некоторые DLL. Я пишу все на С#.
В одной DLL я хочу написать метод, чтобы получить имя и версию приложения из информации о версии в exe.
Я понимаю, что в полной мере .NET я мог бы использовать GetEntryAssembly, но тот, который недоступен в CF.
Ответы
Ответ 1
Получение имени приложения:
System.Reflection.Assembly.GetExecutingAssembly().GetName().Name;
Получение версии:
System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;
Возможно, вы захотите использовать GetCallingAssembly()
или получить сборку по типу (например, typeof(Program).Assembly
), если ваша DLL пытается получить версию EXE, и у вас нет немедленного доступа к ней.
ИЗМЕНИТЬ
Если у вас есть DLL и вам нужно имя исполняемого файла, у вас есть несколько вариантов, в зависимости от варианта использования. Вы можете получить сборку из типа, содержащегося в сборке EXE, но так как DLL ссылается на EXE, для этого объекта требуется EXE-проход.
Version GetAssemblyVersionFromObjectType(object o)
{
o.GetType().Assembly.GetName().Version;
}
Вы также можете немного сделать такой конец:
[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;
Ответ 2
System.Reflection.Assembly.GetEntryAssembly().GetName().Version;
Эта функция даст версию приложения, откуда загружаются другие библиотеки.
System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;
Это даст версию текущей библиотеки. Если вы вызовете это в библиотеке приложений, вы получите версию приложения, и если вы вызовете это в DLL, то получите эту версию DLL.
Итак, по-моему System.Reflection.Assembly.GetEntryAssembly().GetName().Version;
функция currect для использования.
Ответ 3
Если вы хотите создать компонент (.dll), чтобы использовать в другом приложении ссылку для получения основного имени и версии приложения, вы можете использовать этот способ:
Получение основного имени приложения:
AppDomain.CurrentDomain.DomainManager.EntryAssembly.GetName().Name;
Получение версии:
AppDomain.CurrentDomain.DomainManager.EntryAssembly.GetName().Version.ToString();
Получение полного имени (укажите: имя приложения, версию приложения, культура, publicKeyToken):
AppDomain.CurrentDomain.DomainManager.EntryAssembly.FullName;
Но в этом решении есть проблема, это зависит от хоста, и если он выполняется непосредственно из исполняемого файла, произойдет ошибка.
Поэтому следующие выборы:
Получение основного имени приложения:
string appName = AppDomain.CurrentDomain.FriendlyName;
appName = appName.Substring(0, appName.IndexOf('.'));
Получение версии:
System.Windows.Forms.Application.ProductVersion;
Ответ 4
Можете ли вы попробовать использовать FileInfo
Класс FileVersionInfo
. Надеюсь, это поможет..
Вы также можете попробовать Win32 API, например GetModuleFile()