Как получить имя и версию приложения exe в С# Compact Framework - программирование
Подтвердить что ты не робот

Как получить имя и версию приложения exe в С# Compact Framework

Мое приложение имеет exe и использует некоторые DLL. Я пишу все на С#.

В одной DLL я хочу написать метод, чтобы получить имя и версию приложения из информации о версии в exe.

Я понимаю, что в полной мере .NET я мог бы использовать GetEntryAssembly, но тот, который недоступен в CF.

4b9b3361

Ответ 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()