[C#] Check the .net Framework

04/11/2012 11:30 Obilee#1
I wanted to ask if you know a way how to check in C# what .net frameworks are used through a started application.

e.g

Process process = new Process();
process.StartInfo.FileName = applicationPath;
process.Start();

proccess.getframework() <- something like this

I'm not talking about what frameworks are installed on the computer
04/11/2012 11:48 Extremiie29#2
Humm? What do you mean with this Post?
04/11/2012 12:17 boxxiebabee#3
Code:
    class Program
    {
        static void Main()
        {
            const string path = @"C:\Programme\beispiel.exe";
            Assembly ass = Assembly.LoadFrom(path);

            #region Methode 1
            string imageRuntimeVersion = ass.ImageRuntimeVersion;
            Console.WriteLine(imageRuntimeVersion);
            #endregion

            #region Methode 2
            AssemblyName[] referencedAssemblies = ass.GetReferencedAssemblies();
            foreach (AssemblyName a in referencedAssemblies)
            {
               
                Console.WriteLine(a.Version); //a.FullName
            }
            #endregion
            Console.ReadLine();
        }
    }
funktioniert aber nicht bei allen.
ansonsten wie man es mit ildasm rausfindet -> [Only registered and activated users can see links. Click Here To Register...]
04/11/2012 12:46 Obilee#4
Das hat mir schon geholfen, aber was für andere Assemblys sucht den GetReferencedAssemblies noch raus ? Dort kommen ja mehrere Versionen als ergebniss raus.

So wie ich verstanden habe sind Assemblys Metadaten über ein Programm ?

Wie ich sehe bekomme ich auch eine andere Version angezeigt wenn ich ass.FullName nehme
04/11/2012 12:56 MoepMeep#5
Wenn du in Visual Studio unter Verweise guckst, siehst du alle. Ob nun alle mit dem Code von Lizzaran ausgegeben werden, kann ich dir nicht sagen, aber ich vermute es. Schreib am besten den Namen dazu, dann solltest du es besser sehen.
04/11/2012 13:08 Obilee#6
Ich brauch es ja für fremde programme und soll außerdem automatisch gehn da kann ich schlecht meinem server sagen: mach mal bitte vb auf und schau nach :P

denk mal die verschiedenen versionsnummmern kommen durch die verschiedenen genutzt libs zustande
04/11/2012 13:11 boxxiebabee#7
Hier nochmal zum veranschaulichen:

[Only registered and activated users can see links. Click Here To Register...]

4.0 erkennbar an ImageRuntimeVersion.
3.5 erkennbar an ImageRuntimeVersion und das System.Core eingebunden ist.
2.0 erkennbar an ImageRuntimeVersion und das System.Core nicht eingebunden ist.

info: System.Core ist erst ab der Version 3.5 verfügbar.


Edit:
Version 2.0 und 3.0 geben leider das gleiche aus. Aber 3.0 wird meiner Meinung nach eh nie benutzt, also kann man dann davon ausgehen das es sich um 2.0 handelt.
04/11/2012 13:31 MoepMeep#8
Quote:
Originally Posted by Obilee View Post
Ich brauch es ja für fremde programme und soll außerdem automatisch gehn da kann ich schlecht meinem server sagen: mach mal bitte vb auf und schau nach :P
Das war mir schon klar, sollte nur als Veranschaulichung dienen.

Quote:
denk mal die verschiedenen versionsnummmern kommen durch die verschiedenen genutzt libs zustande
Genau das wollte ich sagen :p
04/11/2012 13:32 Obilee#9
jetzt ist die frage welche der versionen man nehmen muss, an sich müsste man ja die höchste versionsnummer von den referencedAssemblies nehmen ? wenn man z.b bei deinem 2tn beispiel nicht 3.5 auf dem rechner hat kann man die core nicht nutzen.

habs mal mit paint.net getestet:

ImageRuntimeVersion = 2.0
Version unter FullName = 3.5
Höchste Reference Version = 3.5
Niedrigste Reference Version = 0.85

aber bei meinem eigenem program hab ich folgendes

ImageRuntimeVersion = 2.0
Version unter FullName = 1.0
Höchste Reference Version = 2.0
Niedrigste Reference Version = 2.0

iwie seh ich da keine logik hinter :<
04/11/2012 13:54 boxxiebabee#10
Naja, ich hab das vorher noch nie gebraucht, kann natürlich auch sein das es nicht einwandfrei funktioniert. Habs mit selbst erstellten .exe'n probiert, da gehts. War auch nur ne Idee wie man das lösen könnte.

Ich hab hier fix mal was kleines gemacht. Einfach die zu überprüfende Datei auf die .exe ziehen dann zeigt es (bzw versucht) welche Version dafür benutzt wurde.

Für Virustotal bin ich zu faul, das überlass ich dir.
04/11/2012 14:09 Obilee#11
Hab mal mein problem auch bei stackoverflow geposted: [Only registered and activated users can see links. Click Here To Register...]

wenn ich in vs in den projekt einstellungen schau was unter "target framework" steht müsste dann die version sein welche das programm nutzt oder ?
bin aus der java ecke darum kenn ich mich dem entsprechend weniger hier aus
04/11/2012 14:15 boxxiebabee#12
Quote:
Originally Posted by Obilee View Post
Hab mal mein problem auch bei stackoverflow geposted: [Only registered and activated users can see links. Click Here To Register...]

wenn ich in vs in den projekt einstellungen schau was unter "target framework" steht müsste dann die version sein welche das programm nutzt oder ?
bin aus der java ecke darum kenn ich mich dem entsprechend weniger hier aus
Welche Version für das Projekt verwendet wird kannst du so sehen:
Oben im Menu auf Projekt -> ganz unten ist dann ein Menüpunkt mit dem Namen deines Projektes, dannach siehst du unter Zielframework oder auf englisch halt Target Framework die Version die verwendet wird.

Probier einfach mal meine .exe aus und schau obs funktioniert.

btw das bild was du auf stackoverflow gepostet hast mit dem paint.net.. das benutzt doch das framework 3.5 oder? das würde dir mein programm anzeigen ;)

edit: das topic auf das der typ auf stackoverflow verlinkt hat.. genauso mach ichs auch.
04/13/2012 01:03 vwap#13
Quote:
Originally Posted by Obilee View Post
wenn ich in vs in den projekt einstellungen schau was unter "target framework" steht müsste dann die version sein welche das programm nutzt oder ?
bin aus der java ecke darum kenn ich mich dem entsprechend weniger hier aus
Ich weiß jetzt nicht genau, in wie fern du dich schon mit dem .NET Framework auskennst, aber du kannst dir das ungefähr so vorstellen:

Das Framework wird in Versionen aufgeteilt und jede Version hat einen unterschiedlichen Funktionsumfang.

In den Projekteinstellungen kannst du auswählen, "mit welcher Basis" dein Projekt erstellt werden soll.

In Java wären das einfach unterschiedliche JDK-Versionen.

Lg.