deadhorseには当てはまりませんが、インストールされている.NETフレームワークを検出する方法を探しています。提供されたソリューション(リンク内)は、フレームワークの新しいバージョンがリリースされてからすべての賭けが解除されるまでは、すべてうまくいくようです。この理由は、検出がレジストリキーに依存しているため、フレームワークのv4が規約を破っているように見えるため、v4を検出するために追加の手順が必要です。.NETバージョンの検出を将来的に証明する
.NET v5が表示されても動作する.NETフレームワークを検出する方法はありますか?
EDIT:OK、イライラ.NETバージョン求職者の将来の世代のために、ここでそれを実現するためのコードは次のとおりです。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Diagnostics;
using Microsoft.Win32;
private List<string> GetInstalledDotNetFrameworks()
{
string key = string.Empty;
string version = string.Empty;
List<string> frameworks = new List<string>();
var matches = Registry.LocalMachine
.OpenSubKey(@"SOFTWARE\Microsoft\NET Framework Setup\NDP")
.GetSubKeyNames().Where(keyname => Regex.IsMatch(keyname, @"^v\d"));
// special handling for v4.0 (deprecated) and v4 (has subkeys with info)
foreach (var item in matches)
{
switch (item)
{
case "v4.0": // deprecated - ignore
break;
case "v4":// get more info from subkeys
key = @"SOFTWARE\Microsoft\NET Framework Setup\NDP\" + item;
string[] subkeys = Registry.LocalMachine
.OpenSubKey(key)
.GetSubKeyNames();
foreach (var subkey in subkeys)
{
key = @"SOFTWARE\Microsoft\NET Framework Setup\NDP\" + item + @"\" + subkey;
version = Registry.LocalMachine
.OpenSubKey(key)
.GetValue("Version").ToString();
version = string.Format("{0} ({1})", version, subkey);
frameworks.Add(version);
}
break;
case "v1.1.4322": // special case, as the framework does not follow convention
frameworks.Add(item);
break;
default:
try
{
// get the Version value
key = @"SOFTWARE\Microsoft\NET Framework Setup\NDP\" + item;
version = Registry.LocalMachine
.OpenSubKey(key)
.GetValue("Version").ToString();
frameworks.Add(version);
}
catch
{
// most likely new .NET Framework got introduced and broke the convention
}
break;
}
}
// sort the list, just in case the registry was not sorted
frameworks.Sort();
return frameworks;
}
ありがとう、私はこのレジストリキーについて知りませんでした - 私はHKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ NET Framework Setup \ NDPに行かなければならないと思った。私はこれがちょうどトリックをするかもしれないと思う。 – AngryHacker
申し訳ありませんが、実際には機能しませんでした。 Software/Microsoft/.NETFrameworkにv3.5が表示されない – AngryHacker
修正済み - 現在、NDPレジストリキーを使用しています。 –