potisanのプログラミングメモ

趣味のプログラマーがプログラミング関係で気になったことや調べたことをいつでも忘れられるようにメモするブログです。はてなブログ無料版なので記事の上の方はたぶん広告です。記事中にも広告挿入されるみたいです。

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:この記事は別のブログで投稿した記事を移動したものです。