Я надеялся получить помощь с ошибкой, которую я не могу обойти.
Немного предыстории - у нас есть большое приложение для Windows, которое использует реестр (первоначально оно было написано еще в .NET v1.1 и было обновлено до v3.5). Я пытаюсь сделать его 64-битным и почти готов. В любом случае, у нас также есть небольшое служебное приложение .net, которое было написано для системных администраторов, которые поддерживают приложение для редактирования / изменения значений реестра, поскольку они зашифрованы и не могут быть просто изменены через Regedit. Я получаю ошибку в коде приложения утилиты.
Ошибка: "Указанное значение RegistryKeyPermissionCheck недопустимо. Имя параметра: mode"
Ошибка появляется, когда код утилиты пытается создать несуществующий подраздел, например:
Dim regKey As RegistryKey
regKey = Registry.LocalMachine.OpenSubKey("Software\[APPLICATION]\[SUBKEY]\", True)
If regKey Is Nothing Then
Dim tempKey As RegistryKey
tempKey = Registry.LocalMachine.OpenSubKey("SOFTWARE", True)
tempKey.CreateSubKey("[APPLICATION]\[SUBKEY]\")
tempKey.Close()
regKey = Registry.LocalMachine.OpenSubKey("[APPLICATION]\[SUBKEY]\", True)
End If
Когда код попадает в строку CreateSubKey , он выдает ошибку ... Есть ли в любом случае эта ошибка?
Кстати, код может записывать, считывать и устанавливать существующие значения ключей реестра. Дайте мне знать, если у вас есть какие-либо вопросы.
Вот трассировка стека:
System.ArgumentException was unhandled
Message="The specified RegistryKeyPermissionCheck value is invalid. Parameter name: mode"
ParamName="mode"
Source="mscorlib"
StackTrace:
at Microsoft.Win32.RegistryKey.ValidateKeyMode(RegistryKeyPermissionCheck mode)
at Microsoft.Win32.RegistryKey.CreateSubKey(String subkey,
RegistryKeyPermissionCheck permissionCheck, RegistrySecurity registrySecurity)
at PolarisRegistryEditor.PolarisKeys.SaveRegistryvalues(RegistryKey reg) in C:\apps
\Visual Studio 2008\Projects\PolarisRegistryEditor\PolarisRegistryEditor
\PolarisKeys.vb:line 321
at PolarisRegistryEditor.PolarisKeys.Save() in C:\apps\Visual Studio 2008\Projects
\PolarisRegistryEditor\PolarisRegistryEditor\PolarisKeys.vb:line 278
at PolarisRegistryEditor.Form1.btnSet_Click(Object sender, EventArgs e) in
C:\apps\Visual Studio 2008\Projects\PolarisRegistryEditor\PolarisRegistryEditor
\Form1.vb:line 36
at System.Windows.Forms.Control.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.WndProc(Message& m) at
System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg,
IntPtr wparam, IntPtr lparam) at
System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg) at
System.Windows.Forms.Application.ComponentManager.System.Windows.
Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32
dwComponentID, Int32 reason, Int32 pvLoopData) at
System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32
reason, ApplicationContext context) at
System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason,
ApplicationContext context) at
Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.
DoApplicationModel() at
Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.
Run(String[] commandLine) at
PolarisRegistryEditor.My.MyApplication.Main(String[] Args) in
17d14f5c-a337-4978-8281-53493378c1071.vb:line 81 at
System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args) at
Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() at
System.Threading.ExecutionContext.Run(ExecutionContext executionContext,
ContextCallback callback, Object state) at
System.Threading.ThreadHelper.ThreadStart()