Я не могу сказать вам, почему это изменилось, но кажется, что правила компиляции ядра. net используются с новым форматом csproj. Таким образом, эта проблема также будет возникать при переходе с. net Framework на. net Ядро, как это уже было задано здесь Поиск ключей реестра, выдающих различные выходные данные. net ядро и. net фреймворк .
Скомпилировано для "x86":
Always 32-bit
On 32-bit platforms, accesses 32-bit registry
On 64-bit platforms, accesses 32-bit registry (inside Wow6432Node)
Скомпилировано для "x64":
Always 64 bit
On 32-bit platforms, won't run
On 64-bit platforms, accesses 64-bit registry (not inside Wow6432Node)
. NET Приложение скомпилировано для "AnyCpu"
Either 32 or 64 bit depending on platform
On 32-bit platforms, accesses 32-bit registry
On 64-bit platforms, accesses 64-bit registry (not inside Wow6432Node)
Короче говоря, решение заключалось в том, чтобы также жестко проверять код на 64-битных ключах реестра.
string registry_key32 = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
using (RegistryKey key = Registry.LocalMachine.OpenSubKey(registry_key))
{
var subKeys = key.GetSubKeyNames();
}
string registry_key64 = @"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall";
using (RegistryKey key = Registry.LocalMachine.OpenSubKey(registry_key))
{
var subKeys = key.GetSubKeyNames();
}