注册表项在机器重新启动后不再持续

问题描述:

我创建了一个需要记住一些值(某些复选框的状态(已选中/未选中))的应用程序。问题如下:注册表项在机器重新启动后不再持续

如果我选中/取消选中复选框并重新启动应用程序,一切都很好。 如果我选中/取消选中复选框并重新启动计算机,启动时(我已经在windows激活的情况下运行),应用程序不记得实际值,而是之前的值。

现在这里是奇怪的部分。如果我在第二个场景上关闭应用程序并再次打开它,则值设置正确(即使我不更改它们)。

另外: 如果我检查/取消选中复选框并重新启动,但没有启动窗口复选框激活,如果我在Windows启动后打开应用程序一切都很好。

唯一的错误是当Windows自己启动它时。

这里是启动该程序的窗口组成部分:

private void RunStartup(Boolean RunOnStartup) 
    { 
     Microsoft.Win32.RegistryKey key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true); 
     if (RunOnStartup == true) 
     { 
      key.SetValue("app", Application.ExecutablePath.ToString()); 
     } 
     else 
     { 
      key.DeleteValue("app", false); 
     } 
    } 
+0

哇,那个评论很久了。请参阅下面的答案。 – 2011-05-03 19:35:13

是否有可能在计划下一个不同的运行在计算机启动后向上(即系统帐户,因为当时没有用户登录)?

在这种情况下,Registry.CurrentUser...将与交互式启动程序时不同。

+0

相同的用户,相同的注册表。另外请注意,如果我关闭并打开一切都很好。 – zozo 2011-05-03 19:20:34

+0

@zozo:应用程序究竟是如何启动的?它是在用户登录之前启动还是在用户登录之后启动? – M4N 2011-05-03 19:21:45

+0

之后。但我使用同一个用户。 – zozo 2011-05-03 19:23:23

有几件事情澄清你的问题:

  1. 在注册表中的你在哪里存储执行之间的数据?是HKCU的一切吗?

  2. 当你说它记得“之前的价值”,你是否意味着从最后一次启动?或者,如果您在重新启动之前多次重复“更改/重新启动应用程序/更改/重新启动应用程序”过程,它是否始终记住倒数第二组值?

  3. 您是否在应用程序已打开的情况下重新启动计算机?是否有可能在Windows关机事件中没有正确保存状态?

在这里尝试的一件事是添加一些日志记录,例如, log4net)复制到执行恢复的代码部分,并验证您实际上是每次都从同一个地方进行阅读。

+0

1.我实际上没有做保存部分,一个同事这样做,他是......不再和我们在一起。我想是在HKCU。 2.上次启动前的值。 3.重新启动时,应用程序是否关闭或无关紧要。它发生的一样。如果我关闭重新启动,那么旧的值就会出现,如果我关闭并重新打开应用程序,那么新的值将会出现如果我打开应用程序重新启动,情况也是如此这听起来有点SF,但这是它的作用。 – zozo 2011-05-04 11:25:08