我编写了三个程序来修改Windows Mobile中的注册表,以安装和删除今天的屏幕插件以进行调试。他们工作了一段时间,但他们一个接一个地突然发出“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。我觉得很奇怪这些程序找了一段时间,然后突然停止了工作。
有什么想法吗?
答案 0 :(得分:0)
我看到你没有调用RegistryKey.Close()(即你的例子中的CustomItem.Close()),因此密钥可能仍然是打开的并且没有刷新到磁盘,因此你得到UnAuthorizedAccessException?
答案 1 :(得分:0)
我要做的一个更改是将“DeleteSubKey”更改为“DeleteSubKeyTree”,因为如果您要删除的键下有任何子键,“DeleteSubKey”将失败。
您是否尝试将它们编写为C中的本机应用程序?看看你是否遇到同样的问题。