レジストリのサブキーの作成について

タグの編集
投稿者 N88-Basic  (社会人) 投稿日時 2020/11/27 16:48:04
Windows 10 home(64) Ver 20H2 + Visual Studio 2019 にて、レジストリを操作するアプリを作成していますが実行時エラーが発生します。
状況は以下の通りです。

テスト中のコード(サブキーの作成)(値の設定でも同様のエラーが発生しました)

Dim SubKey_Personalization As String = "SOFTWARE\Policies\Microsoft\Windows\Personalization"
Dim ValueName_NoLockScreen As String = "NoLockScreen"
Dim regkey As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.LocalMachine.CreateSubKey(SubKey_Personalization)
regkey.SetValue(ValueName_NoLockScreen, 1)
regkey.Close()

エラーは3行目で内容は以下の通りです。
System.UnauthorizedAccessException
  HResult=0x80070005
  Message=レジストリ キー 'HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Personalization' へのアクセスが拒否されました。
  Source=mscorlib

ただし、値の読出しは問題ありません。
読出しのコード
Dim regkey As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(SubKey_Personalization)
Dim iValue As Integer = CInt(regkey.GetValue(ValueName_NoLockScreen)
regkey.Close()

解決策をご存じでしたらご教授ください。
よろしくお願いいたします。


投稿者 魔界の仮面弁士  (社会人) 投稿日時 2020/11/27 17:45:46
レジストリ エディターで
 HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Personalization
のキーを右クリックし、[アクセス許可] を確認してみてください。

Authenticated Users に対しては、読み取り専用の権限しか付与されていないと思います。
SYSTEM (NT AUTHORITY\System) であれば書き込めるでしょうけれども。

HKEY_LOCAL_MACHINE は一般ユーザーが編集すべき領域では無いので、
アプリを配布するインストーラーに対して、レジストリの書き換えを行わせるようにするか、
もしくは権限昇格を行い、一時的(あるいは恒久的)に、アプリケーションを管理者モードで
実行させるようにする必要があるでしょう。

https://dobon.net/vb/dotnet/system/asadmin.html
投稿者 N88-BASIC  (社会人) 投稿日時 2020/11/28 10:24:54
魔界の仮面弁士 さん、ご回答ありがとうございました。

>HKEY_LOCAL_MACHINE は一般ユーザーが編集すべき領域では無い

 とのことで、設定内容が多岐にわたるわけではないので、レジストリエディタのエキスポートを利用して対象の値をファイル保存(この辺りはONEDRIVEは便利です)して、実行する方法をとりたいと思います。
 対象マシンがタブレットですがダブルタップだけで設定できそうです。

ご紹介いただいた方法は、今後の研究課題として試してみたいと思います。

ありがとうございました。
今後ともよろしくお願いいたします。