1

我一直在努力更新一个允许用户选择 SDK 版本和位类型来运行 .Net Framework SDK 工具的工具。

为此,需要获取最新 SDK 的安装位置,我们一直回到 v1.0。到目前为止,我已经找到以下内容并正在寻找确认。

v1.0、v1.1 和 v2.0 框架安装文件夹注册表项位于各自的注册表平台版本下。即64位安装文件夹所在位置为64位注册表项,32位安装目录为32位注册表项。

Examples:

Windows XP:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework 

Windows 7 64 bit (v2.0 only):
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\.NETFramework\v2.0
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\.NETFramework\v2.0

v3.0、v3.5、v4.0 框架安装文件夹在 32 位和 64 位注册表项中都有 32 位安装文件夹和 64 位安装文件夹。这使得这些版本的事情变得足够简单。只需将密钥读取为 OS 位版本和您的权利。

Examples:

Windows 7 64 bit:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.1\WinSDKNetFx35Tools
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.1\WinSDKNetFx35Tools-x64

v4.5、v4.5.1 框架安装文件夹似乎只存在于 32 位注册表项下。即使是 64 位安装,注册表项也只存在于 3264WoW 节点下,这意味着您必须像阅读 32 位应用程序一样阅读它。

Examples:

Windows 7 64 bit:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows\v8.1A\WinSDK-NetFx40Tools
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows\v8.1A\WinSDK-NetFx40Tools-x64

请注意,在 64 位窗口上,将使用带有 32 位标志的注册表读取任何对 Wow6432Node 的引用。我从来没有直接准备好 Wow6432Node,只是指定注册表对象从哪个部分读取。

这似乎很复杂,让我觉得我没有正确。此外,我无法在 .Net SDK 安装位置找到任何权威文档。

所以问题是我在这里错过了什么或有什么不正确的。

4

1 回答 1

1

你是对的,没有更好的解决方案读取 8.1A 路径 z Wow6432Node

public static string GetSdk81Path(string sdkIdent)
        {
            string regPath = Path.Combine(@"SOFTWARE\Microsoft\Microsoft SDKs\Windows\v8.1A\", sdkIdent);
            using (RegistryKey baseKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32))
            using (RegistryKey regKey  = baseKey.OpenSubKey(regPath, false))
            {
                if (regKey == null)
                {
                    throw new RegistryKeyNotFoundException("Registry key not found.", baseKey, regPath);
                }
                return regKey.GetValue("InstallationFolder").ToString();
            }
        }
于 2014-03-19T11:51:27.837 回答