4

以下のレジストリパスで「NoModify」の値を設定したい。"HKEY_LOCAL_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();
        }
    }
4

4 に答える 4

1

64ビットマシンを使用していて、アプリが32ビットの場合、これらの設定はHKLM \Software\ノードではなくHKLM\Software\WOW6432Nodeに保存する必要があります。

于 2012-11-12T02:21:52.097 に答える
1

.NETプログラムをコンパイルしx86ない限りAnyCPU、x86として実行されるため、どのような状況でもx86用の「正しい」レジストリキーを使用します。

x64またはとしてコンパイルする場合、おそらくx64マシン上でx64として実行され、x86プログラムが実際にAnyCPU存在する「間違った」レジストリを使用するため、かなり注意が必要です。HKLM\SOFTWARE HKLM\SOFTWARE\WOW6432Node

于 2012-11-12T02:24:09.837 に答える
1

それは私のコードの間違いです。

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

次のようになります。

RegistryView registryView = releaseFlags.Contains("PLATFORM_X86") ? RegistryView.Registry32 : RegistryView.Registry64;
于 2012-11-12T23:01:30.907 に答える
1

この方法でベースキーを開く必要があります。
わたしにはできる。

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");
    }
于 2020-10-05T05:20:36.477 に答える