[英]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.