Путь к каталогу установки активного CLR для текущего приложения .NET можно получить, используя следующий метод:
System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory()
Я бы настоятельно посоветовал бы не читать реестр напрямую. Например, когда приложение .NET работает в 64-битных системах, CLR может быть загружен либо из «C: \ Windows \ Microsoft.NET \ Framework64 \ v2.0.50727» (AnyCPU, целевые объекты компиляции x64), либо из «C: \». Windows \ Microsoft.NET \ Framework \ v2.0.50727 "(цель компиляции x86). Чтение реестра не скажет вам, какой из двух каталогов использовался текущим CLR.
Другим важным фактом является то, что «текущая CLR» будет «2.0» для приложений .NET 2.0, .NET 3.0 и .NET 3.5. Это означает, что вызов GetRuntimeDirectory () вернет каталог 2.0 даже в приложениях .NET 3.5 (которые загружают некоторые их сборки из каталога 3.5). В зависимости от вашей интерпретации термина «путь к каталогу .NET Framework», GetRuntimeDirectory может не быть той информацией, которую вы ищете («каталог CLR» или «каталог, из которого поступают сборки 3.5»).