簡體   English   中英

在C#中將密鑰寫入Windows注冊表

[英]Write keys into the Windows registry in C#

我們正在嘗試使用C#將鍵值對添加到Windows注冊表中。

寫入的關鍵是另一個用戶的環境變量。 該用戶將是服務用戶,並且永遠不會登錄。

通過P /調用LoadUserProfile ,我們已經能夠獲取用戶SID並將其添加到注冊表中。

但是,嘗試寫入Environment Sub Key時出現問題:

        using (var key = Registry.Users.OpenSubKey(userSid + "\\Environment"))
        {
            if (key == null)
            {
                Debug.WriteLine("Key was null (typical)");
                return;
            }

            key.SetValue("A", "B");
        }

這會拋出UnauthorizedAccessException並提供真正有用的消息

無法寫入注冊表項

該應用程序正在以管理員身份運行。

由於明顯的原因,我猜想這與安全訪問控制有關。 我可以使用var security = key.GetAccessControl();獲取訪問控制var security = key.GetAccessControl(); 但是,我不知道要更改哪些值才能寫入環境。

僅作記錄用途,我可以將值寫入其他一些鍵,例如HKEY_USERS本身或HKEY_LOCAL_MACHINE本身,但是不能寫入HKEY_LOCAL_MACHINE\\Public

如果有幫助,這是堆棧跟蹤:

************** Exception Text **************
System.UnauthorizedAccessException: Cannot write to the registry key.
   at System.ThrowHelper.ThrowUnauthorizedAccessException(ExceptionResource resource)
   at Microsoft.Win32.RegistryKey.EnsureWriteable()
   at Microsoft.Win32.RegistryKey.SetValue(String name, Object value, RegistryValueKind valueKind)
   at Microsoft.Win32.RegistryKey.SetValue(String name, Object value)
   at TestingEnvVariables.Form1.GetVariablesButtonClick(Object sender, EventArgs e)
   at System.Windows.Forms.Control.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
   at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.ButtonBase.WndProc(Message& m)
   at System.Windows.Forms.Button.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

答對了!

RegistryKey.OpenSubKey(String)上的MSDN文章中

檢索子項為只讀。

您需要RegistryKey.OpenSubKey(String, Boolean)MSDN article ):

檢索指定的子項,並指定是否將寫訪問權限應用於該項。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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