[英]How to write to HKEY_CURRENT_USER\\Control Panel\\Desktop\\WindowMetrics from WinUI3 C# app
在我空白的 WinUI3 應用程序中,我試圖更改注冊表項的值:
HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics\IconSpacing
乍一看,它似乎有效。 我正在打開密鑰並將值更新為一個新值。 在我的例子中是“-1129”。 在注冊表編輯器中可見的原始值為“-1128”。 我還在第一個調試 output 中得到原始值“-1128”(僅在應用程序第一次運行時)。
RegistryKey windowMetricsKey = Registry.CurrentUser.OpenSubKey("Control Panel\\Desktop\\WindowMetrics", true);
Debug.WriteLine(windowMetricsKey.GetValue("IconSpacing")); // -1128 (only the first time the app runs, after that it's -1129
windowMetricsKey.SetValue("IconSpacing", "-1129");
Debug.WriteLine(windowMetricsKey.GetValue("IconSpacing")); // -1129
如果我關閉並重新打開我的 WinUI3 應用程序,新值將被保留,但注冊表編輯器中顯示的值永遠不會改變。 好像我在更新別的東西。 Visual Studio 中沒有顯示任何錯誤或任何與訪問相關的錯誤。
系統重啟不會改變任何東西。
我也嘗試直接使用HKEY_USERS/{ Session Id }
而不是HKEY_CURRENT_USER
,但結果是一樣的。 我正在更新一些內容,但更改在注冊表編輯器中不可用。
如果我卸載該應用程序並重新安裝它,則會重復該過程。 第一次運行時我得到“-1128”,然后該值更新為“-1129”,但注冊表編輯器顯示原始值。
為什么注冊表項沒有更新以及我實際更新的是什么? 我可以更新“真實的” HKEY_CURRENT_USER
嗎?如何更新?
謝謝!
我的系統:
這似乎是因為 WoW64 注冊表重定向將密鑰Wow6432Node
插入到密鑰樹中。 您可以使用OpenBaseKey
並自己設置必要的注冊表視圖來避免它。 這是一個示例:
using (RegistryKey root = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64)) {
// Use "root" instead of Registry.LocalMachine
}
在此處了解有關注冊表重定向的更多信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.