簡體   English   中英

如何從 WinUI3 C# 應用程序寫入 HKEY_CURRENT_USER\\Control Panel\\Desktop\\WindowMetrics

[英]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嗎?如何更新?

謝謝!

我的系統:

  • Windows 10 專業版,22H2,19045.2364,
  • Windows 功能體驗包120.2212.4190.0,
  • Visual Studio 2022(版本 17.4.3),
  • 最新的 WinUI3 (Windows App SDK 1.2),

這似乎是因為 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM