Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 删除Windows CE 5.0上的注册表项_C#_Registry_Windows Ce - Fatal编程技术网

C# 删除Windows CE 5.0上的注册表项

C# 删除Windows CE 5.0上的注册表项,c#,registry,windows-ce,C#,Registry,Windows Ce,使用VisualStudio2005和C#(CF v2.0)。以下代码删除Windows CE 6.0上的注册表项: RegistryKey key_test = Registry.LocalMachine.CreateSubKey("Test"); RegistryKey key_users = key_test.CreateSubKey("Users"); key_users.DeleteSubKey("User1"); // Yes, this key does exist! key_u

使用VisualStudio2005和C#(CF v2.0)。以下代码删除Windows CE 6.0上的注册表项:

RegistryKey key_test = Registry.LocalMachine.CreateSubKey("Test");
RegistryKey key_users = key_test.CreateSubKey("Users");
key_users.DeleteSubKey("User1");  // Yes, this key does exist!
key_users.Flush();
// Now power down the device; on power up, key is gone
但在WindowsCE5.0上,完全相同的代码无法删除密钥。调用“DeleteSubKey”并手动检查注册表后,该项似乎已消失。但是当你重新启动设备时…钥匙又回来了

我可以检测到操作系统,因此我尝试了Windows CE 5.0的一种变体:

key_users.DeleteSubKeyTree("User1");    // DeleteSubKey also fails
key_users.Close();

但这也未能删除密钥。同样,该键似乎消失了,但在设备重新通电后,该键又回来了。我已经将上述代码封装在try-catch块中,没有引发异常,代码运行正常,只是不起作用。有什么想法吗?我是否需要在Windows CE 5.0上执行我缺少的其他操作?添加密钥没有问题,只需简单的“刷新”即可添加密钥。

您的ce5设备似乎没有永久注册表。您是否尝试创建密钥?重新启动后它仍在那里?

否,注册表是永久的。如最后一行所述,添加一个关键的工作。奇怪的是,如果我使用第三方注册表编辑器或内置的Visual Studio“远程注册表编辑器”,那么这两种编辑器似乎都成功地删除了该项……但在通电时,该项又回来了!最后,我手动删除了密钥,但这一次我没有关机,而是使用Start>Suspend命令,这一次密钥被删除。在这种情况下,刷新可能会解决问题,而且代码中似乎有一个。suspend将强制刷新整个文件系统,这可以解释不同的行为。添加密钥可能会增加配置单元文件的大小,而删除它可能不会。在用于保存注册表的存储器上是否启用了缓存?可能有问题。如何检查存储上是否启用了缓存?CE 5.0和CE 6.0设备均来自同一供应商(德国)。据我所知,设备(及其相关存储)的配置类似,只是较新的CE 6.0设备具有更快的处理器、更多的内存…并且运行CE 6.0而不是CE 5.0!您可以尝试通过PInvoke调用RegFlushKey API吗?这有助于了解.NET中的.flush函数是否存在某些问题。我们将立即尝试并报告。请注意,我可以通过使用以下代码强制暂停并重新启动设备来解决这个问题,但从用户的角度来看,这有点难看。[DllImport(“coredll.dll”)]私有静态外部int-SetSystemPowerState(字符串psState、int-nStateFlags、int-nOptions);//重新启动设备设置系统状态(空,电源状态重置,0);