我們試圖使用C#將密鑰值對添加到Windows註冊表中。將密鑰寫入C#中的Windows註冊表中
寫入密鑰是另一個用戶的環境變量。用戶將是服務用戶,並且從不登錄。
我們已經可以通過P/Invoking LoadUserProfile
獲得用戶SID並將其添加到註冊表中。
然而,試圖寫入環境子項有當一個問題:
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();
獲得訪問控制。但是,我不知道要將哪些值更改爲能夠寫入環境。
只是爲了記錄,我可以將值寫入其他一些鍵,如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)
該應用程序是否正在運行「以管理員身份運行」。如果沒有,請嘗試。它看起來像,你沒有寫權限。 –
@MuralidharanDeenathayalan - 是的,它運行在「以管理員身份運行」 –
嘗試模擬用戶,使用您獲得的相同用戶令牌來調用'LoadUserProfile'。 –