potisanのプログラミングメモ

プログラミング素人です。昔の自分を育ててくれたネット情報に少しでも貢献できるよう、情報を貯めていこうと思っています。Windows環境のC++やC#がメインです。

C# 現在使用されているMicrosoft Windows SDKの場所とバージョンを取得する

C#で現在使用されているMicrosoft Windows SDKの場所とバージョンを取得するにはレジストリを参照します。64ビット環境で32ビットアプリケーションを起動した場合、WOW64により異なるキーを参照してしまうことに注意してください。

レジストリキーの場所 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows

取得するサンプルコード(.NET Frameworkコンソールアプリケーション)

using System;
using Microsoft.Win32;

namespace ConsoleApp1
{
    class Program
    {
        static void Main()
        {
            Console.WriteLine($"現在のインストール場所:{MicrosoftWindowsSDKInfo.CurrentInstallFolderPath}");
            Console.WriteLine($"現在のバージョン:{MicrosoftWindowsSDKInfo.CurrentVersion}");
        }
    }

    public static class MicrosoftWindowsSDKInfo
    {
        // HKEY_LOCAL_MACHINEルートキー以下の場所
        private const string MicrosoftWindowsSDKRegKeyPath = @"SOFTWARE\Microsoft\Microsoft SDKs\Windows";

        public static string CurrentInstallFolderPath => GetWindowsKeyValue<string>("CurrentInstallFolder");
        public static string CurrentVersion => GetWindowsKeyValue<string>("CurrentVersion");

        private static T GetWindowsKeyValue<T>(string name, T defaultValue = default(T))
        {
            // WOW64の回避
            using (var hklm = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64))
            {
                using (var key = hklm.OpenSubKey(MicrosoftWindowsSDKRegKeyPath))
                {
                    return (T)key.GetValue(name, defaultValue);
                }
            }
        }
    }
}

2021/3/10:この記事は別のブログで投稿した記事を移動したものです。