注册表项在计算机重新启动后不会保留

时间:2011-05-03 19:10:55

标签: c# windows visual-studio-2010 startup

我创建了一个需要记住某些值的应用程序(某些复选框的状态(已选中/未选中))。问题如下:

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

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

此外: 如果我选中/取消选中复选框并重启但没有启动windows复选框激活,如果我在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);
        }
    }

2 个答案:

答案 0 :(得分:0)

计算机启动后程序是否可能以不同的方式运行(即系统帐户,因为当时没有用户登录)?

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

答案 1 :(得分:0)

澄清你的问题的一些事情:

  1. 在注册表中你在执行之间存储数据的位置是什么?一切都在HKCU吗?

  2. 当你说它记得“之前的价值”时你的意思是从上次创业开始?或者,如果您在重新启动之前多次重复“更改/重新启动应用程序/更改/重新启动应用程序”进程,它是否始终记住倒数第二组值?

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

  4. 这里尝试的一件事是添加一些日志记录,例如log4net,执行还原的代码部分,并确认您每次都在同一个地方进行读取。