2016-08-27 2 views
4

я использую этот код, чтобы получить свою версию программы:C# Как получить версию этого текущего исполняемого EXE-файл

public string progVersion = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString(); 

Однако, это не всегда, кажется, чтобы захватить версию я ожидал , Я действительно не понимаю, как это работает полностью или что это делает.

Я думаю, что это связано с тем, что я запускаю свою программу из другой программы, тогда она, похоже, захватывает версию программы, которая его запускала, или «GetExecutingAssembly()» Я принимаю ссылки на исполняемую программу моя программа, вот так:

System.Diagnostics.Process.Start(my_programs_path); 

есть более надежный способ, чтобы получить версию программы фактической программы в то время, я прошу за это?

Возможно, даже запустите мою программу, не выходя из какой-то тропы, как если бы пользователь сам запустил ее.

Спасибо за помощь!

+0

я начинаю думать, что Я испытывал какую-то аномалию, вызванную чем-то другим, так как я не t, чтобы воспроизвести его. – Eric

ответ

0

GetExecutingAssembly() возвращает сборку, содержащую метод thaτ, который называет его. Если вы выберете его из библиотеки, вы всегда получите версию библиотеки, а не исполняемую программу.

Чтобы получить исполняемый использование приложения GetEntryAssembly()

Рассмотрим следующий пример:

В AssemblyA:

class VersionTest 
{ 
    void Test() 
    { 
    Console.Write("Executing assembly: {0}\n", Assembly.GetExecutingAssembly().GetName().ToString()); // returns AssemblyA 
    Console.Write("Entry assembly: {0}\n", Assembly.GetEntryAssembly().GetName().ToString());   // returns AssemblyB 
    } 
} 

В AssemblyB:

class Program 
{ 
    void Main() 
    { 
     var ver = new VersionTest(); 
     ver.Test(); 
    } 
} 
+0

Вот что я искал. Спасибо! – Eric

2

Вы можете использовать свойство Assembly известного типа через typeof, который определен в вашем приложении, чтобы убедиться, что вы получили «правильную» сборку, а затем извлекаете ее версию, например.

typeof(YourKnownType).Assembly.GetName().Version.ToString(); 
+0

Если вышеуказанный код находится в сборке библиотеки классов, нет способа узнать (или даже иметь ссылку) тип в основной сборке приложения (.exe). Таким образом, он не может быть использован для возврата версии приложения .exe –

Смежные вопросы