Мое приложение должно олицетворять служебную учетную запись, что я делаю с помощью нативного вызова LogonUser
.Однако оказывается, что случайные компоненты в библиотеке .Net пытаются получить доступ к разделам реестра, к которым у учетной записи нет доступа, в результате чего создается SecurityException
.
В частности, когда я загружаю LinkLabel
, происходит сбой при попытке определить цвет гиперссылки по умолчанию в IE:
System.Security.SecurityException: Requested registry access is not allowed.
at System.ThrowHelper.ThrowSecurityException(ExceptionResource resource)
at Microsoft.Win32.RegistryKey.OpenSubKey(String name, Boolean writable)
at Microsoft.Win32.RegistryKey.OpenSubKey(String name)
at System.Windows.Forms.LinkUtilities.GetIEColor(String name)
at System.Windows.Forms.LinkUtilities.get_IELinkColor()
at System.Windows.Forms.LinkLabel.get_LinkColor()
at System.Windows.Forms.LinkLabel.OnPaint(PaintEventArgs e)
at System.Windows.Forms.Control.PaintWithErrorHandling(PaintEventArgs e, Int16 layer, Boolean disposeEventArgs)
at System.Windows.Forms.Control.WmPaint(Message& m)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.Label.WndProc(Message& m)
at System.Windows.Forms.LinkLabel.WndProc(Message& msg)
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)
The Zone of the assembly that failed was: MyComputer
Нет, установка цвета по умолчанию не помогает.
Я нашел эту тему с точно такой же проблемой, но, боюсь, я не понимаю решения:
кусты реестра, загруженные LoadUserProfile
, хранятся в HKU, HKCU остается кустом пользователя интерактивного входа (загруженby winlogon.exe).
Так что если вам нужно попасть в только что загруженный улей, вам нужно:
- установить Regkey
в Registry.Users
- открыть подраздел, используя строку SIDучетной записи пользователя, которую вы олицетворяете.
Кто-нибудь знает какие-либо обходные пути для этого?