/* To Compile: PATH\\TO\\jsc.exe QueryDotnet.js This example is based on: https://docs.microsoft.com/en-us/dotnet/framework/migration-guide/how-to-determine-which-versions-are-installed */ import System; import Microsoft.Win32; /* The Following is for Checking for .NET version 1 to 4.0 */ function GetVersionFromRegistry(): void { // Opens the registry key for the .NET Framework entry. var ndpKey :RegistryKey = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, ""). OpenSubKey("SOFTWARE\\Microsoft\\NET Framework Setup\\NDP\\", false); /* // As an alternative, if you know the computers you will query are running .NET Framework 4.5 // or later, you can use: var ndpKey :RegistryKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32). OpenSubKey("SOFTWARE\\Microsoft\\NET Framework Setup\\NDP\\", false); */ for (var versionKeyIndex in ndpKey.GetSubKeyNames()) { var versionKeyName = ndpKey.GetSubKeyNames()[versionKeyIndex]; if (versionKeyName.StartsWith("v")) { var versionKey:RegistryKey = ndpKey.OpenSubKey(versionKeyName); var name:String = versionKey.GetValue("Version", ""); var sp:String = versionKey.GetValue("SP", "").ToString(); var install:String = versionKey.GetValue("Install", "").ToString(); if (install == "") { //no install info, must be later. Console.WriteLine(versionKeyName + " " + name); } else { if (sp != "" && install == "1") { Console.WriteLine(versionKeyName + " " + name + " SP" + sp); } } if (name != "") { continue; } for (var subKeyIndex in versionKey.GetSubKeyNames()) { var subKeyName = versionKey.GetSubKeyNames()[subKeyIndex] var subKey:RegistryKey = versionKey.OpenSubKey(subKeyName); name = subKey.GetValue("Version", ""); if (name != "") sp = subKey.GetValue("SP", "").ToString(); install = subKey.GetValue("Install", "").ToString(); if (install == ""){ //no install info, must be later. Console.WriteLine(versionKeyName + " " + name); } else { if (sp != "" && install == "1") { Console.WriteLine(" " + subKeyName + " " + name + " SP" + sp); } else if (install == "1") { Console.WriteLine(" " + subKeyName + " " + name); } } } } } } GetVersionFromRegistry(); /* The Following Section is to Query for .NET version 4.5 or newer */ function Get45PlusFromRegistry() :void { var subkey:String = "SOFTWARE\\Microsoft\\NET Framework Setup\\NDP\\v4\\Full\\"; var myHKLM :RegistryKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32); var ndpKey :RegistryKey = myHKLM.OpenSubKey(subkey,false); if (ndpKey != null && ndpKey.GetValue("Release") != null) { Console.WriteLine(".NET Framework Version: " + CheckFor45PlusVersion(ndpKey.GetValue("Release"))); } else { Console.WriteLine(".NET Framework Version 4.5 or later is not detected."); } } // Checking the version using >= will enable forward compatibility. function CheckFor45PlusVersion(releaseKey:int) : String { if (releaseKey >= 461808) return "4.7.2 or later"; if (releaseKey >= 461308) return "4.7.1"; if (releaseKey >= 460798) return "4.7"; if (releaseKey >= 394802) return "4.6.2"; if (releaseKey >= 394254) return "4.6.1"; if (releaseKey >= 393295) return "4.6"; if (releaseKey >= 379893) return "4.5.2"; if (releaseKey >= 378675) return "4.5.1"; if (releaseKey >= 378389) return "4.5"; // This code should never execute. A non-null release key should mean // that 4.5 or later is installed. return "No 4.5 or later version detected"; } Get45PlusFromRegistry()