あなたはこれを行うことができます。
System.Environment.Version.ToString()
(CLRバージョンをのみ)
またはUpdated sample .NET Framework detection code that does more in-depth checking
上のMSDNのブログから、この
またはこの
レジストリへのアクセスがありません。 this blogから借りています。
using System;
using System.IO;
using System.Security;
using System.Text.RegularExpressions;
namespace YourNameSpace
{
public class SystemInfo
{
private const string FRAMEWORK_PATH = "\\Microsoft.NET\\Framework";
private const string WINDIR1 = "windir";
private const string WINDIR2 = "SystemRoot";
public static string FrameworkVersion
{
get
{
try
{
return getHighestVersion(NetFrameworkInstallationPath);
}
catch (SecurityException)
{
return "Unknown";
}
}
}
private static string getHighestVersion(string installationPath)
{
string[] versions = Directory.GetDirectories(installationPath, "v*");
string version = "Unknown";
for (int i = versions.Length - 1; i >= 0; i--)
{
version = extractVersion(versions[i]);
if (isNumber(version))
return version;
}
return version;
}
private static string extractVersion(string directory)
{
int startIndex = directory.LastIndexOf("\\") + 2;
return directory.Substring(startIndex, directory.Length - startIndex);
}
private static bool isNumber(string str)
{
return new Regex(@"^[0-9]+\.?[0-9]*$").IsMatch(str);
}
public static string NetFrameworkInstallationPath
{
get { return WindowsPath + FRAMEWORK_PATH; }
}
public static string WindowsPath
{
get
{
string winDir = Environment.GetEnvironmentVariable(WINDIR1);
if (String.IsNullOrEmpty(winDir))
winDir = Environment.GetEnvironmentVariable(WINDIR2);
return winDir;
}
}
}
}
Here is an improved example that includes service packs、
string path = System.Environment.SystemDirectory;
path = path.Substring(0, path.LastIndexOf('\\'));
path = Path.Combine(path, "Microsoft.NET");
// C:\WINDOWS\Microsoft.NET\
string[] versions = new string[]{
"Framework\\v1.0.3705",
"Framework64\\v1.0.3705",
"Framework\\v1.1.4322",
"Framework64\\v1.1.4322",
"Framework\\v2.0.50727",
"Framework64\\v2.0.50727",
"Framework\\v3.0",
"Framework64\\v3.0",
"Framework\\v3.5",
"Framework64\\v3.5",
"Framework\\v3.5\\Microsoft .NET Framework 3.5 SP1",
"Framework64\\v3.5\\Microsoft .NET Framework 3.5 SP1",
"Framework\\v4.0",
"Framework64\\v4.0"
};
foreach(string version in versions)
{
string versionPath = Path.Combine(path, version);
DirectoryInfo dir = new DirectoryInfo(versionPath);
if(dir.Exists)
{
Response.Output.Write("{0}<br/>", version);
}
}
問題は、彼らが出てくるようバージョンに追いつくために持っているということです。
なぜあなたは、レジストリを使用することはできません。
ここでは、コードですか? – SLaks
私はレジストリにアクセスする権限を持っていないユーザーのためにこれをやっているので。 – ogrod87
あなたは常にレジストリへのアクセス権を持っています。あなたは書き込みアクセス権を持っていないかもしれませんが、あなたは読み取りアクセス権を持っています。 (信頼できないコードを実行している場合を除いて、ファイルシステムにアクセスすることはできません) – SLaks