Несанкционированный реестр Windows MobileAccessException - PullRequest
0 голосов
/ 17 мая 2009

Я написал три программы, которые изменяют реестр в Windows Mobile, чтобы установить и удалить плагин todayscreen для целей отладки. Некоторое время они прекрасно работали, но один за другим неожиданно давали исключение «UnauthorizedAccessException».

См. Код для двух программ ниже (обратите внимание, что следующий код просто находится непосредственно в Main, поэтому он запускается, а затем программа завершается) ...

RegistryInit.exe:

RegistryKey CustomItem = Microsoft.Win32.Registry.LocalMachine.CreateSubKey(@"Software\Microsoft\Today\Items\TodayLauncher");
CustomItem.SetValue("Type", 4, RegistryValueKind.DWord);
CustomItem.SetValue("Enabled", 1, RegistryValueKind.DWord);
CustomItem.SetValue("Options", 1, RegistryValueKind.DWord);
CustomItem.SetValue("DLL", @"\Program Files\TodayLauncher\TodayLauncher.dll", RegistryValueKind.String);
CustomItem.SetValue("Config", @"\Program Files\TodayLauncher\Settings.cfg", RegistryValueKind.String);
CustomItem.SetValue("Selectability", 1, RegistryValueKind.DWord);

SendMessage((IntPtr)HWND_BROADCAST, WM_WININICHANGE, 0xF2, 0);

RegistryClear:

Microsoft.Win32.Registry.LocalMachine.DeleteSubKey(@"Software\Microsoft\Today\Items\TodayLauncher");
SendMessage((IntPtr)HWND_BROADCAST, WM_WININICHANGE, 0xF2, 0);

Третья программа была программой конфигурации, которая имела опции для добавления и удаления ключей реестра, используя точные копии кода выше, но она никогда не работала. Некоторое время он мог запускать код для «RegistryInit», но это продолжалось недолго. Теперь оригинальная программа «RegistryClear» не работает, предоставляя то же исключение UnauthorizedAccessException. Я нахожу очень странным, что эти программы работали некоторое время, а затем внезапно перестали работать.

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 20 мая 2009

Одно изменение, которое я хотел бы сделать, это изменить «DeleteSubKey» на «DeleteSubKeyTree», так как «DeleteSubKey» завершится ошибкой, если под удаляемым ключом есть какие-либо дополнительные ключи.

Вы пытались написать их как родное приложение на C? Посмотрим, возникнут ли у вас такие же проблемы.

0 голосов
/ 18 мая 2009

Я вижу, что вы не вызываете RegistryKey.Close () (т. Е. CustomItem.Close () в вашем примере), поэтому ключ все еще может быть открыт и не записан на диск, поэтому вы получаете исключение UnAuthorizedAccessException?

...