Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SetValue 64位计算机注册表_C#_.net_Installation_Registry_64 Bit - Fatal编程技术网

C# SetValue 64位计算机注册表

C# SetValue 64位计算机注册表,c#,.net,installation,registry,64-bit,C#,.net,Installation,Registry,64 Bit,我想在下面的注册表路径中为“NoModify”设置一个值。 “HKEY\U LOCAL\U MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\XXXX” 我使用下面的代码,它只适用于X86机器。你能理解为什么这不适用于x64机器吗 // This value is correct RegistryView registryView = releaseFlags.Contains("PLATFORM_X86") ? Regist

我想在下面的注册表路径中为“NoModify”设置一个值。 “HKEY\U LOCAL\U MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\XXXX”

我使用下面的代码,它只适用于X86机器。你能理解为什么这不适用于x64机器吗

// This value is correct
RegistryView registryView = releaseFlags.Contains("PLATFORM_X86") ? RegistryView.Registry64 : RegistryView.Registry32;

    using (RegistryKey hkeyLocalMachine = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, registryView))
    {
        RegistryKey noModifyKey = hkeyLocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{xxxx}", true); //SL: Key Name

        if (noModifyKey != null)
        {
            noModifyKey.SetValue("NoModify", 0);
            noModifyKey.Flush();
        }
    }

当您在64位计算机上且应用程序为32位时,应用程序应将这些设置存储在HKLM\Software\WOW6432节点中,而不是HKLM\Software\node中

只要您将.NET程序编译为
x86
而不是
AnyCPU
,您将在任何情况下使用适用于x86的“正确”注册表项,因为它将作为x86运行


如果将其编译为
x64
AnyCPU
,可能会非常棘手,因为它可能会在x64机器上以x64的形式运行,并使用“错误”注册表,其中x86程序的
HKLM\SOFTWARE
实际上是
HKLM\SOFTWARE\WOW6432Node
,这是我的代码错误

RegistryView registryView = releaseFlags.Contains("PLATFORM_X86") ? RegistryView.Registry64 : RegistryView.Registry32;
应如下所示:

RegistryView registryView = releaseFlags.Contains("PLATFORM_X86") ? RegistryView.Registry32 : RegistryView.Registry64;

您应该以这种方式打开基本密钥。
它对我有用

var rk = Microsoft.Win32.RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, RegistryView.Registry32);
    if (Environment.Is64BitOperatingSystem) {
        rk = Microsoft.Win32.RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, RegistryView.Registry64);
        var val = rk.OpenSubKey("SOFTWARE\\Pourab\\sanjande", true);
    
        val.SetValue("test", "testvalue");
    }

详细说明“不工作”。它是否在错误的注册表中设置了值,是否因错误而失败?别让我们蒙在鼓里。什么是释放旗?